Как добавить макрос в SAS в переменную даты, чтобы создать набор данных для каждого месяца отдельно?

Как я могу добавить макрос в приведенный ниже код, чтобы делать то же самое для каждого месяца года отдельно? Например, мне также нужно создать sourceg.trades_nov2008. Спасибо.

data sourceg.trades_dec2008(drop=dt);
set sourceh.trades_: indsname=ds_name open=defer;

dt = input(scan(ds_name, 2, "_"), date9.);
day = day(dt);
month = month(dt);
year = year(dt);

newtime=time/1000;
format newtime time12.3;
Hour=hour(newtime);
Minute=minute(newtime);
Second=second(newtime);
run;

person Betsy B    schedule 27.03.2016    source источник
comment
Где появляется дата, кроме имени набора выходных данных? Если он нигде не используется, результаты будут одинаковыми между итерациями.   -  person Reeza    schedule 27.03.2016
comment
trades_01jan2008 trades_02jan2008 Я пытаюсь добавлять ежедневные файлы с такими именами. Код, который у меня есть, добавляет их в ежемесячный файл trades_jan2008. Но мне нужно сделать это для данных за несколько лет, и я пытался сделать это с помощью макроса. Спасибо.   -  person Betsy B    schedule 27.03.2016
comment
Где в шаге данных месяц вступает в игру? Выделите конкретную строку, пожалуйста.   -  person Reeza    schedule 27.03.2016
comment
dt = input(scan(ds_name, 2, _), date9.); день = день (дт); месяц = ​​месяц (дт); год = год (дт); Я не уверен, как выделить в коде, но месяц находится в 3-й строке выше. Спасибо.   -  person Betsy B    schedule 27.03.2016
comment
Но вы ничего с этим не делаете... код выше вашего полного кода?   -  person Reeza    schedule 27.03.2016


Ответы (1)


Вы можете создать макрос из своего кода, добавив в код %macro monthly(date) и %mend. Затем вы можете вызывать его повторно, используя либо ручной вызов, либо вызов вызова.

%macro monthly(date);

 data sourceg.trades_&date;
 *rest of sas code;

 run;

%mend;

%monthly(nov2008);
%monthly(jan2008);

Учитывая ваше текущее объяснение проблемы, я не уверен, что предложить помимо этого. Я оставлю call execute в качестве упражнения для вас, так как это хорошо описано здесь. Кроме того, если у вас есть определенный диапазон дат, вы можете вместо этого добавить цикл, но я не знаю, подходит ли вам это.

person Reeza    schedule 27.03.2016
comment
Хорошо, спасибо, попробую то, что вы предлагаете. То, что я дал в исходном вопросе, - это весь код, который у меня есть. Что он делает, так это создает переменную дня, месяца и года в наборе данных (их не было в наборе данных, а только в его имени, например trades_01jan2008). Затем он добавляет каждый ежедневный файл в ежемесячный файл. Поскольку я должен делать это в течение многих месяцев, мне было интересно, есть ли макрос, который я мог бы добавить, не выполняя каждый месяц вручную (что также возможно). Спасибо еще раз. - person Betsy B; 28.03.2016
comment
Оператор set использует двоеточие, поэтому он добавляет все наборы данных, которые начинаются с префикса. Возможно, вы захотите объяснить, что у вас есть и чего вы пытаетесь достичь. Здесь много сообщений об объединении наборов данных. Посетите сайт community.sas.com для получения дополнительных примеров. - person Reeza; 28.03.2016