Я ищу способ создания строковой переменной, содержащей определенные значения набора данных, проходя через шаг данных.
Пример набора данных work.test:
AddToStringYN Value
Y One
Y Two
N Three
Y Four
N Five
Итакв конце переменная будет выглядеть так: OneTwoFour (или даже лучше FourTwoOne).Это выглядит так просто, но я не могу найти способ сделать это.Я также пытался работать с макро-переменными, как это:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar',"&stringvar" || strip(value));
end;
Run;
Но это дает:
GLOBAL STRINGVAR Four
Так что я получаю только последнее значение.Я понимаю, что это должно быть из-за моего недопонимания по поводу этой макро-функции, но я не понимаю, почему в переменной есть только последнее значение.Я думал, что это был последний раз, когда симпозиум был вызван, что он был фактически выполнен или что-то в этом роде, но потом, когда я изменил код на:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar'||strip(value),"&stringvar" || strip(value));
end;
Run;
Затем я получил их все:
GLOBAL STRINGVARONE One
GLOBAL STRINGVARTWO Two
GLOBAL STRINGVARFOUR Four
Итак, мое последнее предположение состоит в том, что при выполнении шага данных строка 'call symput ...' фактически добавляется в макропроцессор, где "& stringvar" уже заменен, и только после последнего оператора все они выполняются..
Это хорошее предположение или есть другое объяснение?И вернемся к первоначальному вопросу: есть ли простой способ добиться этого (имея нужную переменную)?