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;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.