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
data c;
set data A;
do i=1 to n;
set data B nobs=n point=i;
output;
end;
run;
data c;
set data A;
do i=1 to n;
set data B nobs=n point=i;
output;
end;
run;
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
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.