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
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.