You need to sort the source data by date and keep the last observation.
data HAVE(index=(A=(NAME TRANS_MONTH DATE)));
input NAME $ TRANS_MONTH $ FILE_ATTACH $;
DATE=input(substr(FILE_ATTACH,4),monyy5.);
cards;
A 01 QQQFEB2207:54
A 01 QQQFEB2002:54
A 04 DDDMAR0112:01
B 01 DDDJAN1807:00
B 05 YYYSEP0111:10
B 05 GGGOCT1108:21
;
data FILTERED;
set HAVE;
by NAME TRANS_MONTH DATE;
if last.TRANS_MONTH;
run;
Something like this should help.
data HAVE;
input NAME $ TRANS_MONTH $ FILE_ATTACH $;
cards;
A 01 QQQ
A 02 BBB
A 04 DDD
B 01 DDD
B 02 YYY
B 05 GGG
;
proc transpose data=HAVE out=TRANS prefix=MTH;
by NAME;
id TRANS_MONTH;
var FILE_ATTACH;
run;
data WANT;
array M [12] $8 MTH01 - MTH12 ;
set TRANS ;
do I=1 to 12;
if missing(M[I]) then M[I]='X';
end;
run;
Please adapt to your needs.
Obs | NAME | MTH01 | MTH02 | MTH03 | MTH04 | MTH05 | MTH06 | MTH07 | MTH08 | MTH09 | MTH10 | MTH11 | MTH12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | A | QQQ | BBB | X | DDD | X | X | X | X | X | X | X | X |
2 | B | DDD | YYY | X | X | GGG | X | X | X | X | X | X | X |
No worries. Note the code used to create table HAVE. That's how you should provide data. A table is not useful to recreate your problem.
data HAVE;
input NAME $ TRANS_MONTH $ FILE_ATTACH $;
cards;
A 01 QQQFEB2207:54
A 01 QQQFEB2002:54
A 04 DDDMAR0112:01
B 01 DDDJAN1807:00
B 05 YYYSEP0111:10
B 05 GGGOCT1108:21
;
The output should be something like this:
Obs NAME MTH01 MTH02 MTH03 MTH04 MTH05 MTH06 MTH07 MTH08 MTH09 MTH10 MTH11 MTH12
1 A QQQFEB2207:54 X X DDDMAR0112:01 X X X X X X X X
2 B DDDJAN1807:00 X X X GGG1108:21 X X X X X X X
Thank you so much and have a great day ahead.
maricelj
You need to sort the source data by date and keep the last observation.
data HAVE(index=(A=(NAME TRANS_MONTH DATE)));
input NAME $ TRANS_MONTH $ FILE_ATTACH $;
DATE=input(substr(FILE_ATTACH,4),monyy5.);
cards;
A 01 QQQFEB2207:54
A 01 QQQFEB2002:54
A 04 DDDMAR0112:01
B 01 DDDJAN1807:00
B 05 YYYSEP0111:10
B 05 GGGOCT1108:21
;
data FILTERED;
set HAVE;
by NAME TRANS_MONTH DATE;
if last.TRANS_MONTH;
run;
CrizNZ,
Thank you so much. It works.
Have a great day and keep safe.
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.