我创建了40个以上的表(使用marco,我刚刚学习了如何做),要将Proc Sort语句应用于该表。我希望每个表都按相同的变量“ Account_Description”排序(每个表都包含此变量)。
表名是June_53410_v1,June_53420_v1,June_53430_v1等。我可以使用宏吗?如果可以,我该如何减轻为每个表编写proc排序语句的麻烦?
谢谢!
我在网上找到了此示例代码,但我不确定该如何工作
%Macro sorter(dsn, var);
proc sort data=&dsn.;
by &var.;
run;
%mend;
%sorter(sample_dataset, age);
答案 0 :(得分:2)
将要使用的宏(进行过程排序写入工作):
%Macro sorter(lib,dsn, var);
proc sort data=&lib..&dsn. out=&dsn.;
by &var.;
run;
%mend;
获取包含一些字符的表的字典(其maby为“ June_”而不是“ AIR”):
data sashelp_tables;
set sashelp.vtable;
where LIBNAME="SASHELP" and MEMNAME contains "AIR"
;
run;
将代码写入字符串,然后对所有表执行该代码:
data _NULL_;
length code $ 200;
set sashelp_tables;
code=cat('%sorter(',LIBNAME,',',MEMNAME,',AIR);');
call execute(code);
run;
答案 1 :(得分:2)
您可以使用以下解决方案,其中lib是libname,mask_table是表的掩码(任务中的Jun_),而var是对表进行排序的变量:
%macro sorter(lib,mask_table, var); %macro d;%mend d;
%let table_list = 0;
proc sql noprint;
select strip(libname) || '.' || strip(memname),count(memname)
into: table_list separated by ' '
from dictionary.tables
where libname = UPCASE("&lib.") and memname LIKE UPCASE("&mask_table.")||"%";
quit;
%do i=1 %to %sysfunc(countw(&table_list,%str( )));
%let name&i = %scan(&table_list, &i, %str( ));
proc sort data=&&name&i.;
by &var.;
run;
%end;
%mend sorter;
%sorter(WORK,June,Account_Description);
答案 2 :(得分:1)
我很感谢大家的投入-我认为我使用此代码找到了答案:
.fail
.fail .eda
.eda .fail
.fail
hello world