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
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.
Ready to level-up your skills? Choose your own adventure.