- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thank You everyone for your fast reply!
It works; however, I took the simpler one that I can understand.
Thanks~
- Matt