Hi Everyone,
My data has a 1000+ columns. The LAST available data in a column is data of today().(So in the code, I sort descending date_id to bring the today up to top). Note, after the last available data row, there could be no value rows.
Based on the last data is today(), I need to fill date for each row.
Ok, the Macro as shown below produce the exact output I want.
However I need 1 line of macro for each variable/column.
Clearly, I need to loop through all columns in my data.
Can you please help me to create a loop code?
Thank you,
HHC
data have;
input date_id v1 v2 v3;
datalines;
1 33 44 1
2 5 6 5
3 4 5 .
4 . 7 .
5 66 4 6
6 . 9 .
;run;
data output; set _NULL_;run;
%MACRO lastdate( column=);
*create subfile with only: column date_id and 1 variable;
data subfile; set have;
keep date_id &column; run;
*sort to bring the most recent date on top;
proc sort data=subfile; by descending date_id;run;
*Delete all missing row UP TO the first data available which is today;
data subfile(drop=_:);
set subfile;
retain _del_flg 1;
if _del_flg then
do;
_del_flg=missing(&column);
if _del_flg then delete;
end;
run;
*Fill Date;
data subfile; length variable_name $8.;set subfile;
keep &column variable_name datadate;
rename &column=value;
variable_name=vname(&column);
format datadate date10.;
if _N_=1 then lastdate=date_id;
retain lastdate;
datadate=today() - (lastdate-date_id);
run;
*Add to output file;
data output; set output subfile; run;
%mend;
%lastdate( column=v1);
%lastdate( column=v2);
%lastdate( column=v3);
... View more