我有一个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;
答案 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);