Calcite | Level 5

## How to set two data sets?

I have  two data sets A and B; A has 1000 observations and B has 40 observations. They have no commom variables. I want to create a data set C that has 1000x40 observations, for each observation of data A having 40 observations of data B. My code is below:

Data C;

do i=1 to 1000;

set A;

do j=1 to 40

set B;

output;

end;

end;

Run;

Data c has only 40 observations. The log display: only 2 observations from data A; 40 observations from B;

Can you help me to fix this problem? Thank you,

Zhu

1 ACCEPTED SOLUTION

Accepted Solutions
Calcite | Level 5

## Re: How to set two data sets?

data c;

set data A;

do i=1 to n;

set data B nobs=n point=i;

output;

end;

run;

2 REPLIES 2
Calcite | Level 5

## Re: How to set two data sets?

data c;

set data A;

do i=1 to n;

set data B nobs=n point=i;

output;

end;

run;

Onyx | Level 15

## Re: How to set two data sets?

Looks like you have it figured out yourself by using a classic data step way. Although I think it is worth mentioning that for this kind of task, SQL seems to have a native edge, as SQL join generates Cartesian products to start with.

proc sql;

create table c as

select * from a,b;

quit;

BTW, with the advent of Hash(), data step has been granted the similar power as SQL join:

data c (drop=_:);

if _n_=1 then do;

set a (obs=1);

dcl hash h(dataset:'a', ordered:'a');

h.definekey(all:'y');

h.definedone();

dcl hiter hi('h');

end;

set b;

_rc=hi.first();

do while (_rc=0);

output;

_rc=hi.next();

end;

run;

Kindly regards,

Haikuo

Discussion stats
• 2 replies
• 639 views
• 0 likes
• 2 in conversation