Rather than using the Proc Sort procedure all the time..... you can just use the following macro....
and call it when you req... to sort any SAS dataset.....
EXAMPLE1:
%macro srt(dtn,keyvar);
proc sort data=&dtn;
by &keyvar;
run;
%mend srt;
%srt(ie,PT IEORRES);
*the above step will tell SAS to sort the IE dataset with the by variables PT and IEORRES respectively.
EXAMPLE2:
*Sometimes we need to create an output dataset during the sorting process i.e in the Proc sort step in such a case use the below macro to do the same;
%MACRO SORT(IN=,VAR=,OUT=);
PROC SORT DATA=&IN OUT=&OUT;
by &VAR;
RUN;
%MEND SORT;
%SORT(IN=CEC1,VAR=PT,OUT=CEC2);
%SORT(IN=DERIVE.HEADER,VAR=PT,OUT=HEADER1);
EXAMPLE3:
*Sometimes we need to use the NODUPKEY option to delete the duplicate observations in the dataset in such a case use the below macro to do the same;
%MACRO SORT(IN,VAR,OUT,OPTN);
PROC SORT DATA=&IN OUT=&OUT &OPTN ;
by &VAR;
RUN;
%MEND SORT;
%SORT(IN=AE, AE1,USIBJID AEBODYSYS AESEV, NODUPKEY);
how to pass n number of datasets for sorting in sas using macro?
ReplyDeleteproc contents data=work._all_ out=contents;
ReplyDeleterun;
proc sql;
create table list as select distinct memname from contents;
quit;
*pass n number of datasets from work library ;
data _null_;
set list;
call execute ('%macro('||left(trim(memname))||')');
run;
%macro is the macro you want to run for all the datasets;