Dear All,
What I have:
v1 v2
. 1
. 2
. 3
4 .
5 .
6 .
The last non-missing value of v2 ('3') is what I want to apply to v1 to get updated v2; Or, v2=3*v1.
Desire:
v2
1
2
3
3*4
3*5
3*6
Thanks!~
- Matt
Give this a try and see if it does what you want:
data want;
set have;
retain last_nonmissing_v2;
if v2 > . then last_nonmissing_v2 = v2;
else v2 = v1 * last_nonmissing_v2;
run;
Optionally, you might want to drop last_nonmissing_v2;
Give this a try and see if it does what you want:
data want;
set have;
retain last_nonmissing_v2;
if v2 > . then last_nonmissing_v2 = v2;
else v2 = v1 * last_nonmissing_v2;
run;
Optionally, you might want to drop last_nonmissing_v2;
data have;
input v1 v2;
cards;
. 1
. 2
. 3
4 .
5 .
6 .
;
data want(drop=ttt);
retain ttt 1;
set have;
ttt=ifn((not missing(v1)*not missing(lag(v2))=1),lag(v2),ttt);
v2=ifn(not missing(v2),v2,v1*ttt);
proc print;run;
Thank You everyone for your fast reply!
It works; however, I took the simpler one that I can understand.
Thanks~
- Matt
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.