Hi there, I have a question about multiple output statements within a data step:
data TWO;
input x y;
datalines;
5 2
3 1
5 6
;
RUN;
data ONE TWO OTHER;
set TWO;
if X eq 5 then output ONE;
if Y lt 5 then output TWO;
output;
run;
The code above seems fairly straightforward. However, when I'm looking at the ONE data set, the order of the observations seems to be a little strange:
From the first output statement, the first two observations should be:
5 2
5 6
From the last output statement, the last three observations should be:
5 2
3 1
5 6
I am expecting the combined data set to be:
5 2
5 6
5 2
3 1
5 6
However, the order of the output data set is:
5 | 2 |
5 | 2 |
3 | 1 |
5 | 6 |
5 | 6 |
The order of the data set is changed but it wasn't exactly sorted by X and Y.
Does anyone know how the data set is sorted when we have the two output statements in the data step?
First the data step reads the observation 5 2. Then it checks if X eq 5, which is true, so it outputs to the data set ONE. next it checks if Y lt 5, which is false, so nothing is outputted. Next you simply have an output statement, which means that the 5 2 observations is outputted again(to all created data sets, including X). That is why the first two observations are 5 2.
@kisumsam wrote:
Hi there, I have a question about multiple output statements within a data step:
data TWO; input x y; datalines; 5 2 3 1 5 6 ; RUN; data ONE TWO OTHER; set TWO; if X eq 5 then output ONE; if Y lt 5 then output TWO; output; run;
The code above seems fairly straightforward. However, when I'm looking at the ONE data set, the order of the observations seems to be a little strange:
I am expecting the combined data set to be:
5 2
5 65 2
3 1
5 6
Does anyone know how the data set is sorted when we have the two output statements in the data step?
To get that specific result one way would be:
data three; set TWO (where=(x ge 5)) two ; run;
which reads set two twice, the first bit says to keep only the records with x ge 5 and since that is the first input set they are output first,
then read set two again with all records.
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.