SAS: использовать динамическую макропеременную в цикле в макропрограмме - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу добиться того же, что и:

data train_Sex(keep=Name Sex) train_Age(keep=Name Age) train_Height(keep=Name Height) train_Weight(keep=Name Height);
    set sashelp.class;
run;

с использованием макропрограммы со списком переменных. Насколько я пошел:

* Build macro program;
%macro build_sets(var_list);
    %let nwords = %sysfunc(countw(&var_list));

    %do i=1 %to &nwords;
        call symput("variable",  %scan(&var_list, i));

        data train_&variable(keep=Name &variable);
            set sashelp.class;
        run;

    %end;
%mend;

* Run it;
%let var_list = Sex Age Height Weight;
%build_sets(&var_list);

Но мне не хватает знаний, как я могу динамически изменить «переменную» var.

Спасибо!


похожие вопросы:

1. SAS динамически объявляет макропеременную 2. Использование динамической макропеременной в операторе вызова вызова 3. Динамический доступ к макропеременной SAS

1 Ответ

0 голосов
/ 05 ноября 2018

ты был близко. ниже вещь должна работать для вас. call symput является частью datastep, который используется для создания макропеременных из dvariables и, следовательно, проблемы.

 %macro build_sets(var_list);
;

%do i=1 %to  %sysfunc(countw(&var_list));
    %let variable=  %scan(&var_list, &i));

    data train_&variable(keep=Name &variable);
        set sashelp.class;
    run;

%end;
%mend;

 * Run it;
%let var_list = Sex Age Height Weight;
%build_sets(&var_list);
...