Substr с именем макрокоманды

Я пытаюсь использовать функцию substr в макросах SAS следующим образом:

%let hg=Name;
data gg_;
set sashelp.class; 
gh=%substr(&hg,1,3);
run;

а также я попробовал

data gg_;
set sashelp.class; 
gh=%sysfunc(substr(&hg,1,3));
run;

Здесь Name - это переменная в sashelp.class

Но я не получаю первые три символа из переменной Name в gh. Как мне это сделать?

Ответ 1

Вы смешиваете макрос и логику шага данных. Поскольку это шаг данных, используйте функцию SUBSTR(), а не% substr. Если макропеременная состоит из текста, который вы хотите извлечь, а затем укажите его, в противном случае оставить макрокоманду без кавычек.

gh=substr(&hg, 1, 3);

Примечание: отредактировано, чтобы отразить комментарий.

Ответ 2

Если вы создаете набор данных внутри макрофункции, тогда вы хотите использовать нормальную функцию sas, поэтому вам просто нужно использовать substr() вместо %substr().

%let hg=Name;
data gg_;
set sashelp.class; 
gh=substr(&hg,1,3);
run;