在 sas 中创建一个宏

create a macro in sas

我有一份每年生成一次的报告。每个报告的名称中都有年份的形式 - report-2011.xls、report-2012.xls 等。每个报告包含以下变量:ID、SAL=当年的平均月薪、性别(0 =男,1=女),已婚(0=未婚,1=已婚),我需要创建一个宏,根据性别类型和每年计算 mean.std、最低和最高工资已婚型。在宏中,我需要包含相关年份的参数。 在计算这些参数时如何分别参考每种类型? 以及如何为年份变量创建一个单独的参数?

%macro reporting(year, gender, marital_status);
    proc means data=data&year min max std;  * <== you should have separate datasets for different years 
    class gender married ; 

%mend reporting

%reporting( 2015, 1, 1)

这是您要找的东西吗?

I宏只是一种生成代码的方式。所以首先设计你想让它生成的代码。然后你可以弄清楚它的哪些部分发生了变化,并用宏变量引用替换它们。宏变量然后成为您的宏的参数。

proc import datafile="report-2011.xls" out=report_2011 ; run;
proc means data=report_2011 ;
   class gender married;
run;

proc summary 允许您精确控制您想要交叉数据的方式。

%macro report(year);

proc import datafile="/path/to/report-&year..xls"
    out= salary_data                                                                                                                         
    dbms=csv replace ;                                                                                                                       


proc summary data = salary_data;
    class married gender;
    types married gender married*gender;
    var sal;
    output out = salary_results mean(sal) = mean_salary std(sal) = std_salary;

* Print the summary;
proc print; 

* Delete the data and summary after using them;
proc delete data= salary_data salary_results; run;


%mend report;

请注意,proc summary 会生成其他有用的信息,您可以阅读有关 here 的信息。如果你不需要它们,你可以放弃它们。