Hi SAS experts,
when I ran the following program, I found y was automatically retained for x=4 in data test2. What happed?
Thanks!
data test;
input x y;
cards;
1 .
3 .
;
run;
data test1;
input x;
cards;
3
4
;
run;
data test2;
set test(in=a)
test1(in=b);
if b then do;
if x=3 then y=4;
end;
run;
Any variable that comes from any SAS data set is automatically retained. Since Y comes from a SAS data set, it is automatically retained.
A small complication: when switching data sets (from TEST to TEST1 in the SET statement), Y is reset to missing. You can see that by adding this statement after the SET statement:
put Y;
But once Y is set to 4, it remains 4 (unless changed by subsequent programming statements). As @PGStats said, reading an observation from TEST1 does not replace Y.
There is no y variable in dataset test1 so the value of y isn't reset to missing when test1 is read.
Thanks!
My answer is not quite right. You should mark @Astounding answer as the correct answer instead.
Any variable that comes from any SAS data set is automatically retained. Since Y comes from a SAS data set, it is automatically retained.
A small complication: when switching data sets (from TEST to TEST1 in the SET statement), Y is reset to missing. You can see that by adding this statement after the SET statement:
put Y;
But once Y is set to 4, it remains 4 (unless changed by subsequent programming statements). As @PGStats said, reading an observation from TEST1 does not replace Y.
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 lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.