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.
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.