data input;
input ID $ period amt;
cards;
X 201001 10000
X 201004 800
X 201006 200
Y 201101 100
Y 201102 100
Z 201201 .
Z 201202 .
Z 201203 .
;
run;
Assuming that I understand what you want, here's one way:
data defaults;
set test1 (keep=id amt);
by id;
where amt > .;
if first.id;
rename amt=default_amt;
run;
data want;
merge test1 defaults;
by id;
if amt > . then default_amt = amt;
else amt = default_amt;
drop default_amt;
run;
It's untested, but looks like it should work just fine.
Please repost your orginial question or a close version.
Without the question the response makes no sense.
data input; input ID $ period amt; cards; X 201001 10000 X 201004 800 X 201006 200 Y 201101 100 Y 201102 100 Z 201201 . Z 201202 . Z 201203 . ; run; data want; merge input input(keep=id period rename=(id=_id period=_period) firstobs=2); output; if id=_id then do; do i=period+1 to _period-1; period=i;output; end; end; drop _: i; run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.