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
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.