【问题标题】:SAS macro code to generate mean sales for a particular yearSAS 宏代码生成特定年份的平均销售额
【发布时间】:2019-01-25 17:20:54
【问题描述】:

我正在尝试编写一个生成特定年份平均销售额的宏代码。假设今天我要报告 year=2008,明天要报告 year=2009。 数据有 Order_date 变量,格式为 mmddyy10。

我正在尝试通过以下代码来实现:

%macro yearly(yr=%sysfunc(year("&sysdate"d )); 

proc means data=salesxls;
class &yr;
where year(order_date) == &yr;
title "yearly avg sales for &yr";
run;

%mend yearly;

这不起作用。原因可能是我用来提取年份的 %sysfunc 。任何帮助,将不胜感激。 P.S A Macro 新手在这里

编辑: 有效的单年代码如下:

data new;

set work.salesxls;

yr=year(Order_date);     /** I extracted the year from Order_date)**/

run;

proc means data=new mean;

class yr;

var total_retail_price;

where yr=2008;

run;

在上面的代码中,我首先创建了一个提取年份的数据集。然后我将该数据用于 proc 表示过程。

【问题讨论】:

  • 编写宏首先从工作代码开始。您的 proc 意味着一年的样子,没有有效的宏观逻辑。然后我们可以帮你把它变成一个宏。
  • 您可能会发现这两个链接很有用:这个链接展示了如何使用格式来汇总不同级别(即年份)的数据。 gist.github.com/statgeek/… 这个展示了如何将程序变成宏:github.com/statgeek/SAS-Tutorials/blob/master/…
  • @Reeza 请看编辑

标签: macros sas


【解决方案1】:

以下是您可以简化的方法:

  1. 将 YEAR 计算移到 WHERE 子句中
  2. 将格式应用于 ORDER_DATE 变量 YEAR4.,它将显示并聚合为一年。
  3. 将代码中的 2008 替换为 &year。

    %macro yearAvg(year=);
    proc means data=salesxls mean;
    where year(order_date)=&year.;
    class order_date;
    format order_date year4.;
    var total_retail_price;
    run;
    %mend;
    
    %yearAvg(year=2008);
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多