Salin kumpulan data B untuk setiap variabel dalam kumpulan data A

Saya memiliki dua kumpulan data berikut:

Kumpulan Data A:

ID  
A      
B      
C 

Kumpulan Data B:

Age 
35        
49      
53

Dan saya ingin copy paste B ke setiap ID A:

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

Untuk saat ini saya melakukan ini dengan lingkaran %do tetapi apakah ada cara yang lebih elegan untuk melakukan ini? Dengan satu PROC SQL atau Datastep misalnya?

Terima kasih sebelumnya


person Palmeida    schedule 13.10.2020    source sumber
comment
Tunjukkan kode Anda. Apakah ada alasan Anda melakukan ini dengan %do ? Untuk SQL lihat ke CROSS JOIN   -  person Richard    schedule 13.10.2020
comment
@Richard hanya karena saya tidak tahu cara melakukannya dengan cara lain. Terima kasih atas indikasi gabung silang. Ini juga berhasil. Selain itu, saya tidak tahu itu disebut produk kartesius yang akan membantu pencarian saya. Siklus Do berbelit-belit (sehingga meminta solusi yang lebih sederhana).   -  person Palmeida    schedule 13.10.2020


Jawaban (2)


Anda dapat menggunakan SQL untuk menjalankan produk Cartesian untuk mendapatkan semua kombinasi.

Misalnya:

/* 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

Tidak diperlukan kode makro. Anda dapat menggunakan opsi POINT= pada pernyataan SET untuk melakukan ini dalam langkah data.

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