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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.