BookmarkSubscribeRSS Feed
rohitguptaecb
Calcite | Level 5

friends, can you explain me the difference between these two concatenating methods with an example.

1) data test;

   set a  b;

   run;

2) data test;

set a;

set b;

run;

5 REPLIES 5
Haikuo
Onyx | Level 15

Run this;

data a;

do i=1 to 10;

output;

end;

run;

data b;

  do j=1 to 10;

  output;

  end;

run;

data long;

set a b;

run;

data wide;

set a;

set b;

run;

And tell us what you think the difference are.

Haikuo

rohitguptaecb
Calcite | Level 5

Dear Hai.kuo , not getting the clear picture from the above example.. can you please explain if possible..

Jagadishkatam
Amethyst | Level 16

Hi,

Please check the datasets created by the examples given by Haikuo. The long dataset shows that two datasets are concatenated one below the other (vertical), so that number of observations are more, however in the second example wide the datasets are  concatenated horizontally. due to which the number of observations in the output will be same, the number of obs that will be output depend upon the number of obs in both the datasets, and only equal or same number of obs will in the output.

Thanks,

Jagadish

Thanks,
Jag
kuridisanjeev
Quartz | Level 8

HI Rohit..

in above example given by Hai.kuo,Datasets long and wide clearly tell the difference between to approaches.


If you use Set A B ,

Datasets are concatenated vertically.which means Total Number of observations in final dataset is equals to (Number of Obs in A +Number of Obs in B).


But in the Case of

                                   Set A;                                                                          

                                   Set B;      

                                

Datasets are concatenated horizontally(side by side).

Total Number of observations in final dataset is equals to (Maximum number of Obs From both datasets).


Simple merge will do same thing.So you will get same output with merge statement like.


Data Final;

Merge A B;

run;


For above code ,sorting not required and no need to use by variable also.this will blindly merge first obs from A dataset with first obs from B dataset ,Irrespective of matching values.



Regards.

Sanjeev.K

Jagadishkatam
Amethyst | Level 16

Hi

data wide;

     set A;

     set B;

run;

data wide;

     merge A B;

run;

The above two code are not the same. The current data provided, they are producing the same output. But actually they are different.

I tried with a different data and the results are as below

data a;

do i=1 to 12;

output;

end;

run;

data b;

  do j=2 to 20 by 2;

  output;

  end;

run;

data long;

set a b;

run;

data wide;

set a;

set b;

run;

data wide_;

  merge a b;

run;

please find below the log details

25   data a;

26   do i=1 to 12;

27   output;

28   end;

29   run;

NOTE: The data set WORK.A has 12 observations and 1 variables.

NOTE: DATA statement used (Total process time):

      real time           0.07 seconds

      cpu time            0.03 seconds

30

31   data b;

32     do j=2 to 20 by 2;

33     output;

34     end;

35   run;

NOTE: The data set WORK.B has 10 observations and 1 variables.

NOTE: DATA statement used (Total process time):

      real time           0.01 seconds

      cpu time            0.01 seconds

36

37   data long;

38   set a b;

39   run;

NOTE: There were 12 observations read from the data set WORK.A.

NOTE: There were 10 observations read from the data set WORK.B.

NOTE: The data set WORK.LONG has 22 observations and 2 variables.

NOTE: DATA statement used (Total process time):

      real time           0.03 seconds

      cpu time            0.03 seconds

40

41   data wide;

42   set a;

43   set b;

44   run;

NOTE: There were 11 observations read from the data set WORK.A.

NOTE: There were 10 observations read from the data set WORK.B.

NOTE: The data set WORK.WIDE has 10 observations and 2 variables.

NOTE: DATA statement used (Total process time):

      real time           0.04 seconds

      cpu time            0.01 seconds

45

46   data wide_;

47       merge a b;

48   run;

NOTE: There were 12 observations read from the data set WORK.A.

NOTE: There were 10 observations read from the data set WORK.B.

NOTE: The data set WORK.WIDE_ has 12 observations and 2 variables.

NOTE: DATA statement used (Total process time):

      real time           0.03 seconds

      cpu time            0.03 seconds

if the above code is executed, you will find that dataset A has 12 observations and dataset B has 10 observations.

Now if you used the code set A B; it procduced 22 observations, this is because the code is concatenating the two dataset vertically.

if you use the code set A; set B; then it produced wide dataset with only 10 obs. There is another thing to be noticed, let there be any number of observations in the first dataset, while compiling, only one observation greater than the next dataset will be considered. See the log, in dataset A there should be 12 observations, however only 11 observations are read since there are only 10 observation in the next dataset. Not sure why sas is doing it like that. i read the below article regarding this

http://www2.sas.com/proceedings/forum2008/167-2008.pdf

and found that set A; set B; is overlapping one obs over the other. But during compilation, the number of observation gets fixed in the internal memory. so we get this output.

Coming to the merge A B code, if you see the 12 observations is the output, the other dataset is just horizontally concatenated. However the maximum number of observation in the column will remain the same, there is no reduction.

So there is a difference in both the codes as shown above. 

Hope this helps

Thanks,

Jagadish

Thanks,
Jag

sas-innovate-2024.png

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.

 

Register now!

How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 755 views
  • 7 likes
  • 4 in conversation