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.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.