- %macro Glue(InputFile=,InputSheet=);
- /*macro glue中定义了2个keyword parameter, inputfile和inputsheet*/
- /*inputfile: 输入的excel全路径*/
- /*inputsheet: 输入的excel文件sheet名*/
- /*proc import导入excel文件为sas dataset master*/
- PROC IMPORT OUT= WORK.Master
- DATAFILE= "&inputfile."
- DBMS=EXCEL REPLACE;
- SHEET="&inputsheet";
- GETNAMES=YES;
- RUN;
- /*按order对master排序*/
- Proc Sort data=master;
- by order;
- run;
- /*用call symput()从data step为每个obs创建5个macro variable*/
- /*N从1至sas dataset的最大观测数*/
- /*1 program_N: 取自dataset variable program的value(程序名,如为macro,则必须是macro-name)*/
- /*2 type_of prog_N: 取自dataset variable type的value(类型:sas language or maroc)*/
- /*3 inputlist_N: 取自dataset variable inputlist的value(parameter list)*/
- /*4 location_N: 取自dataset variable location的value(存储位置)*/
- /*5 number_of_progs_N: 记录master的最大观测数*/
- Data _null_;
- set master;
- by order;
- call symput('Program'||'_'||strip(put(_N_,8.)),Program);
- call symput('Type_of_prog'||'_'||strip(put(_N_,8.)),Type);
- call symput('Inputlist'||'_'||strip(put(_N_,8.)),InputList);
- call symput ('Location'|| '_'||strip(put(_N_, 8.)),Location);
- call symput ('number_of_progs',_N_); /*data step的每次迭代值会被覆盖*/
- run;
- /*声明local macro variable a*/
- %local a;
- /*do loop,从1到master的最大观测数*/
- %do a= 1 %to &number_of_progs. ;
- /*include,读入macro variable location_N指代位置的程序*/
- %include "&&Location_&a.";
- /*当macro variable type_of_prog的值为MACRO时*/
- %if %upcase(&&Type_of_prog_&a.) eq MACRO %then %do;
- /*从macro variable program_N获取macro-name*/
- %let program=&&Program_&a.;
- /*从macro variable inputlist_N获得parameter list,放在括号内*/
- %let inputlist=(&&Inputlist_&a);
- /*调用macro*/
- %str(%&program. &inputlist.);
- %end;
- %end ;
- %mend;


雷达卡


京公网安备 11010802022788号







