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 MTH121 A QQQFEB2207:54 X X DDDMAR0112:01 X X X X X X X X2 B DDDJAN1807:00 X X X GGG1108:21 X X X X X X XThank 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.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
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.