【问题标题】:Using a Macro Program使用宏程序
【发布时间】:2021-04-15 04:06:40
【问题描述】:

我正在尝试使用宏程序来制作按总 GPA 排序的前 10% GPA 的记录,结果是 24 个最高 GPA,它们有超过 60 个学分但少于 130 个学分。 下面是我的代码

%MACRO TopTen(outputtable, less, more);
PROC SQL;
select round(count(ID)/10) into :Data from OverallGPA;
quit;

%PUT &Data;

PROC SQL outobs=&Data.;
    Create table &outputtable. as select * 
    from OverallGPA,OverallCreditHoursEarned
    where &less.<OverallCreditHoursEarned<&more.
    order by ID
;
quit;

%MEND;

%TopTen(Report3, 60, 130);
/* creates report of number of values in top ten percent */
PROC REPORT data=Report3;
run;

此 Proc 报告当前正在打印具有相同 ID、TotalGPA 但不同的OverallCreditHoursEarned 的列。 有什么想法可以完成这项工作吗?我使用了我认为可行但不适用于宏的 Proc Rank。 Proc Rank代码如下。

   PROC RANK data=OverallGPA out=Report3Alt(where=(TopTenPercent<=24)) 
   descending ties=Low;
   var TotalGPA;
   ranks TopTenPercent;
   run;

【问题讨论】:

    标签: sas sas-macro proc-sql proc-report


    【解决方案1】:

    您的 SQL 连接没有按照您的意愿进行。这个:

    from OverallGPA, OverallCreditHoursEarned
    where &less. <  OverallCreditHoursEarned < &more
    

    这不会告诉 SAS(或 SQL)连接这两个表的对象,因此它会将 每个表中的每条记录连接到另一个表中的每条记录。如果您在 1 个表中有 100 条记录,而在另一个表中有 100 条记录,它将在输出表中生成 10,000 条记录。这不是你想要的。

    首先,我强烈建议您直接使用PROC RANK,因为这就是它的工作。您正在为 SAS 付费,在有意义的时候使用 SAS。把它放在你有主 PROC SQL 连接的宏中。或者,使用 PROC RANK 中的 GROUPS 选项,它将您的记录分组为十分位数(或其他),并过滤输出数据集 WHERE GROUP=0 或任何适合您需要的内容。这可能有效:

    PROC RANK data=OverallGPA out=Report3Alt(where=(TopTenPercent=0)) groups=10 
       descending ties=Low;
       var TotalGPA;
       ranks TopTenPercent;
       run;
    

    但是,如果您想使用 SQL,请正确连接 - 使用带有 on 语句的显式连接,或者使用 ID 变量将相等性添加到您的 where 语句。我更喜欢使用 on 语句的显式连接,所以类似于

    from OverallGPA inner join OverallCreditHours 
    on OverallGPA.ID = OverallCreditHours.ID
    where OverallCreditHours.OverallCreditHours between &less and &more
    

    或等价物。您可能想要左连接或右连接,我不清楚,但内部似乎最有可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2019-06-20
      • 2011-05-31
      • 1970-01-01
      • 2013-07-05
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多