Макрокод SAS для генерации средних продаж за определенный год - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь написать макрос-код, который генерирует средние продажи за определенный год. Скажем, сегодня я хочу отчет за год = 2008 и завтра за год = 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 Макро новичок здесь

EDIT: Код для одного года работы выглядит следующим образом:

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.

1 Ответ

0 голосов
/ 25 января 2019

Вот как это можно упростить:

  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);
    
...