在 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 的信息。如果你不需要它们,你可以放弃它们。
我有一份每年生成一次的报告。每个报告的名称中都有年份的形式 - 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 的信息。如果你不需要它们,你可以放弃它们。