Похоже, вы хотите сгенерировать серию операторов присваивания, таких как:
total_jun2018 = sum(jun2018, dep_jun2018);
total_jul2018 = sum(jul2018, dep_jul2018);
...
total_jan2019 = sum(jan2019, dep_jan2019);
То, что известно как обои код.
Если имена переменных былипроще, например, от dep1
до dep18
, тогда было бы легко использовать массивы для обработки данных.С вашим текущим соглашением об именах проблема с генерацией операторов массива мало чем отличается от проблемы генерации серии операторов присваивания.
Вы можете создать макрос, чтобы вы могли использовать цикл %DO
для генерацииваш код обоев.
%local i bal_mnth;
%do i=0 %to &tot_bal_mnth.;
%let bal_mnth = %sysfunc(intnx(month,"&min_Completed_dt."d, &i-1), monyy7.);
total_&bal_mnth = sum(&bal_mnth , Dep_&bal_mnth );
%end;
Или вы можете просто сгенерировать код в файл с шагом данных.
%let tot_bal_mnth = 7;
%let min_Completed_dt=01JUN2018;
filename code temp;
data _null_;
file code;
length bal_mnth $7 ;
do i=0 to &tot_bal_mnth.;
bal_mnth = put(intnx('month',"&min_Completed_dt."d, i-1), monyy7.);
put 'total_' bal_mnth $7. ' = sum(' bal_mnth $7. ', Dep_' bal_mnth $7. ');';
end;
run;
Таким образом, сгенерированный файл кода выглядит следующим образом:
total_MAY2018 = sum(MAY2018, Dep_MAY2018);
total_JUN2018 = sum(JUN2018, Dep_JUN2018);
total_JUL2018 = sum(JUL2018, Dep_JUL2018);
total_AUG2018 = sum(AUG2018, Dep_AUG2018);
total_SEP2018 = sum(SEP2018, Dep_SEP2018);
total_OCT2018 = sum(OCT2018, Dep_OCT2018);
total_NOV2018 = sum(NOV2018, Dep_NOV2018);
total_DEC2018 = sum(DEC2018, Dep_DEC2018);
Затем вы можете использовать %include
, чтобы запустить его на шаге данных.
data final4;
set final3;
by hh_no;
%include code / source2 ;
run;