SAS - 使用循环对多个数据集进行排序

时间:2016-05-08 17:05:11

标签: sas

我有一个SAS数据集列表,我希望按相同的变量排序。

我不想为每一个使用PROC Sort语句, 有没有办法使用循环来缩短整个代码?

我是SAS的新手,所以请帮忙!

%let prim =sasdata.qc_no_rx ;
%let other_removals = sasdata.qc_other_removals;
%let drops =sasdata.droplist;


Array data_1(3) $ sasdata.qc_no_rx sasdata.qc_other_removals 

sasdata.droplist ; 

do over data_1;
Proc sort data = data_1 ;
by ims_ref;
end;

2 个答案:

答案 0 :(得分:1)

假设您有一个名为dname_list的数据集,其中包含数据集名称,并且它们被称为dname。 Call execute将生成代码并执行它。

我通常在字符串中创建命令然后传递给调用execute。这是一个data _null_步骤,因此它不会生成数据集,但如果需要,您可以生成要测试的数据集。

您不需要循环,因为SAS循环遍历数据集中的记录。

如果要对库中的数据进行排序,请确保也包含库名。

data _null_;
*data dname_execute;

set dname_list;
string = catt('proc sort data=', dname, '; by age; run;');
call execute(string);
run;

答案 1 :(得分:1)

这应该有所帮助:

%macro multsort(indlist,outdlist,byvarlist,ndata);
%do i = 1 %to &ndata.;

    %let indata = %scan("&indlist.",&i.,"   ");
    %let outdata = %scan("&outdlist.",&i.," ");
    %let byvars = %scan("&byvarlist.",&i.," ");
    proc sort data = &indata. out=&outdata.;by &byvars. ;run;
%end;
%mend;

%multsort(indlist=sashelp.Air   sashelp.Buy,outdlist=Sa Sb,byvarlist=Air    amount,ndata=2);