我是 SAS 的新手,我正在嘗試自動化呼叫具有不同引數的宏的程序。
這是我要呼叫的宏。
%macro expo(month, year);
data policy_&month&year;
set lastpol2;
by policy_no;
drop uwmonth;
accidentmonth = &month&year;
run;
%mend;
自 2016 年以來,我需要每個月和每年都呼叫這個宏,所以當前的方法是簡單地多次呼叫該宏。
%expo(1,2016);
%expo(2,2016);
%expo(3,2016);
%expo(4,2016);
%expo(5,2016);
...
...
%expo(10,2021);
%expo(11,2021);
%expo(12,2021);
我不想有這么長的串列,而是想創建一個回圈來獲取當前年份并在每年的每個月迭代。我的方法是撰寫一個宏以使用不同的引數多次呼叫另一個宏,這是我迄今為止的嘗試。
%macro create_policies();
%let current_year = year(input("&sysdate9",date9.));
%let policy_start_year = 2016;
%if policy_start_year <= current_year %then
%do i = 1 %to 12;
%expo(&i, &policy_start_year);
%end;
%let policy_start_year = &policy_start_year 1;
run;
%mend;
%create_policies()
所以我試圖遍歷 1 到 12 并每次使用回圈中的數字呼叫宏。達到索引 12 后,我希望將這一年更改為下一年,并重復該程序,直到本年結束。
任何幫助或指示都會很棒。
謝謝。
uj5u.com熱心網友回復:
你在正確的軌道上。SAS 有一個名為的內置函式intnx(),可以改變日期和時間以使其更容易。將您的年份轉換為 SAS 日期,但將當前年份與 12 月對齊,并將開始年份與 1 月對齊:
%let policy_start_year = %sysfunc(mdy(1, 1, 2016));
%let current_year = %sysfunc(intnx(year, %sysfunc(today()), 0, E));
%put Start date: %sysfunc(putn(&policy_start_year, date9.));
%put End date: %sysfunc(putn(¤t_year, date9.));
輸出:
Start date: 01JAN2016
End date: 31DEC2021
月份的實際日期本身與此目的無關。
使用該intck()函式計算開始日期和結束日期之間的月數,然后回圈并每次遞增開始日期一個月,直到到達結束日期。例如,如果您從 01JAN2016 開始,從開始日期起的 1 個月是 01FEB2016,從開始日期起的 2 個月是 01MAR2016,等等。您可以使用month()和year()函式獲取每個移動日期的年和月值。
%macro create_policies(start_year);
%let current_year = %sysfunc(intnx(year, %sysfunc(today()), 0, E));
%let policy_start_year = %sysfunc(mdy(1, 1, &start_year.));
%do i = 0 %to %sysfunc(intck(month, &policy_start_year., ¤t_year.) );
%let date = %sysfunc(intnx(month, &policy_start_year., &i.) );
%let month = %sysfunc(month(&date.));
%let year = %sysfunc(year(&date.));
%put date: %sysfunc(putn(&date., date9.)) | year: &year. | month: &month.;
%expo(&month., &year.);
%end;
%mend;
%create_policies(2016);
輸出:
date: 01JAN2016 | year: 2016 | month: 1
date: 01FEB2016 | year: 2016 | month: 2
date: 01MAR2016 | year: 2016 | month: 3
date: 01APR2016 | year: 2016 | month: 4
...
date: 01NOV2020 | year: 2020 | month: 11
date: 01DEC2020 | year: 2020 | month: 12
date: 01JAN2021 | year: 2021 | month: 1
date: 01FEB2021 | year: 2021 | month: 2
...
date: 01SEP2021 | year: 2021 | month: 9
date: 01OCT2021 | year: 2021 | month: 10
date: 01NOV2021 | year: 2021 | month: 11
date: 01DEC2021 | year: 2021 | month: 12
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315534.html
上一篇:根據布爾屬性計算串列中的物件
