使用数组循环的SAS宏代码

时间:2017-03-02 12:59:33

标签: sas sas-macro

我写了SAS代码,我需要根据参数值传递值.SAS代码运行并获得所需的输出

%MACRO FTIC(Student_Entry=, Admission_Year=,YEAR_TRACK=, TERM=, College );
...
...
...
%MEND FTIC;

%FTIC(Student_Entry= A, Admission_Year=2012 ,YEAR_TRACK=1, TERM=Summer/FALL )

以下是每个参数的值:     Student_Entry = A,B,C,D

Admission_year = 2012, 2013, 2014, 2015, 2016

Year_Track = 1, 2,3,4,5

Term= Summer/Fall, Spring

我正在写下4 * 4 * 5 * 2行以上的行。实现我的结果。

%FTIC(Student_Entry= A, Admission_Year=2012 ,YEAR_TRACK=1, TERM=Summer/FALL )

你能告诉我如何更有效地写这个。

1 个答案:

答案 0 :(得分:0)

行。看起来你想要一些方法来自动循环这些参数,并为每个参数组合调用%FTIC宏。

  1. 为每个参数的可能值创建列表。

    %let stud_list = A B C D;
    %let Ad_list = 2012 2013 2014 2015 2016;
    %let YrT_list = 1 2 3 4 5;
    %let term_list = Summer/Fall Spring;

  2. 计算每个列表中的项目。

    %let stud_cnt = %sysfunc(countw(&stud_list),%str( ));
    %let Ad_cnt = %sysfunc(countw(&Ad_list),%str( ));
    %let YrT_cnt = %sysfunc(countw(&YrT_list),%str( ));
    %let term_cnt = %sysfunc(countw(&term_list),%str( ));

  3. 在虚拟宏中使用%do循环重复调用%FTIC宏。

    %macro dummy;
    %do i = 1 %to &stud_cnt; %do ii = 1 %to &ad_cnt; %do iii = 1 %to &yrt_cnt; %do iiii = 1 %to &term_cnt; %FTIC(student_entry = %scan(&stud_list,&i,%str( )), Admission_year = %scan(&Ad_list,&ii,%str( )), Year_track = %scan(&YrT_list,&iii,%str( )), Term = %scan(&term_list,&iiii,%str( )) ); %end; %end; %end; %end; %mend dummy; %dummy;