【问题标题】:create a macro in sas在sas中创建一个宏
【发布时间】:2015-06-13 12:17:54
【问题描述】:

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

【问题讨论】:

  • 可能您可能需要一个 infile 语句/管道语句来读取 excel 文件,并为 1) year= 2011,2012..., 2) 数据步骤建立宏,其中性别 = 1/0 ,3) 已婚类型 =1/0 , 4) 调用 symputx 报告答案.. 请先显示您尝试过的内容。
  • 我没有特定的数据文件才能将其读入sas,关键是我需要创建一个宏来根据定义的参数模拟这个过程。没有实际文件可以做到吗?

标签: macros sas


【解决方案1】:

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;

请注意,过程摘要会产生其他有用的信息,您可以阅读有关 here 的信息。如果您不需要它们,可以丢弃它们。

【讨论】:

    【解决方案2】:

    I 宏只是一种生成代码的方式。所以首先设计你想要它生成的代码。然后你可以找出它的哪些部分变化并用宏变量引用替换那些部分。然后,宏变量将成为您的宏的参数。

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

    【讨论】:

      【解决方案3】:
      %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)
      

      这是您正在寻找的东西吗?

      【讨论】:

      • by %reporting( 2015, 1, 1) 我实际上在 2015 年的报告中生成了所需的统计数据,其中女性已婚?但我实际上需要创建一个宏来分别计算女性和男性的薪水变量(平均、最小值、最大值和标准)(婚姻状况也是如此)。
      • 在这种情况下使用 'class' 会不那么麻烦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多