คัดลอกชุดข้อมูล B สำหรับแต่ละตัวแปรในชุดข้อมูล A

ฉันมีชุดข้อมูลสองชุดต่อไปนี้:

ชุดข้อมูล A:

ID  
A      
B      
C 

ชุดข้อมูล B:

Age 
35        
49      
53

และฉันต้องการคัดลอกวาง B ไปยังแต่ละ ID ของ A:

ID  Age 
A   35
A   49
A   53
B   35
B   49
...

ในขณะนี้ฉันทำสิ่งนี้ด้วย %do cicle แต่มีวิธีที่หรูหรากว่านี้ไหม ด้วย PROC SQL หรือ Datastep เดียว

ขอบคุณล่วงหน้า


person Palmeida    schedule 13.10.2020    source แหล่งที่มา
comment
แสดงรหัสของคุณ มีเหตุผลที่คุณทำเช่นนี้กับ %do หรือไม่? สำหรับ SQL ให้มองหา CROSS JOIN   -  person Richard    schedule 13.10.2020
comment
@ Richard เพียงเพราะฉันไม่สามารถหาวิธีที่จะทำอย่างอื่นได้ ขอบคุณสำหรับการบ่งชี้การเข้าร่วมแบบข้าม มันยังใช้งานได้ นอกจากนี้ฉันไม่รู้ว่ามันเรียกว่าผลิตภัณฑ์คาร์ทีเซียนซึ่งจะช่วยฉันในการค้นหา วงจร Do มีความซับซ้อน (ดังนั้นจึงขอวิธีแก้ปัญหาที่ง่ายกว่า)   -  person Palmeida    schedule 13.10.2020


คำตอบ (2)


คุณสามารถใช้ SQL เพื่อดำเนินการผลิตภัณฑ์คาร์ทีเซียนเพื่อรับชุดค่าผสมทั้งหมด

ตัวอย่างเช่น:

/* setup id data */
data have1;
   input id $char1.;
   datalines;
A
B
C
;

/* setup age data */
data have2;
   input age 8.;
   datalines;
35
49
53
;

/* perform Cartesian product */
proc sql noprint;
   create table
      want
   as
   select
      *
   from
       have1
      ,have2
   ;
quit;
person Amir    schedule 13.10.2020

ไม่จำเป็นต้องมีโค้ดมาโคร คุณสามารถใช้ตัวเลือก POINT= บนคำสั่ง SET เพื่อทำสิ่งนี้ในขั้นตอนข้อมูล

data want;
  set a;
  do p=1 to nobs;
    set b point=p nobs=nobs;
    output;
  end;
run;
person Tom    schedule 13.10.2020