Pilih variabel hanya jika ada SAS SQL

PROC SQL;
    CREATE TABLE SET3 AS 
    SELECT 
        a.VAR1 , b.VAR1 AS P_VAR1 , 
        a.VAR2          
    FROM SET1 AS a FULL JOIN SET2 AS B
    ON  a.VAR1 = b.VAR1 
 ;
QUIT;

Kode di atas membuat tabel bernama SET3 dan menyertakan VAR1 dari 2 kumpulan data, bersama dengan VAR2 dengan a.VAR1=b.VAR1.

Saya ingin kode ini dijalankan untuk menyertakan VAR2 jika tersedia. Terkadang tidak sehingga kodenya mogok.

Saya dapat melakukan ini dengan menulis kode dua kali dengan beberapa makro tetapi bertanya-tanya apakah ada sintaks SQL cepat yang dapat digunakan.

Terimakasih banyak!


person Jason Rogers    schedule 12.12.2016    source sumber


Jawaban (1)


Salah satu pilihannya adalah membuat variabel makro yang akan memiliki VAR1 atau VAR1,VAR2 bergantung pada apakah variabel tersebut ada. dictionary.columns adalah tabel metadata tempat Anda memperolehnya, yang tersedia di proc sql.

Urutan data akhir akan sedikit berbeda (a.VAR1, a.VAR2, b.VAR1), namun mudah-mudahan hal tersebut tidak menjadi masalah.

proc sql noprint;
select cats('a.',name) into :varlist separated by ','
from dictionary.columns
where libname='WORK' and memname='SET1' and name in ('VAR1','VAR2');
quit;

%put &=varlist.;

PROC SQL;
    CREATE TABLE SET3 AS 
    SELECT 
        &varlist. , b.VAR1 AS P_VAR1
    FROM SET1 AS a FULL JOIN SET2 AS B
    ON  a.VAR1 = b.VAR1 
 ;
QUIT;
person Longfish    schedule 12.12.2016
comment
Tolong, baris ini untuk apa? %put &=varlist.; atau maksud Anda : %put &varlist.; - person D. O.; 12.12.2016
comment
Itu hanya menempatkan nilai &varlist. ke dalam log. %put &=varlist. adalah cara pintas pengkodean %put VARLIST=&varlist. - person Longfish; 12.12.2016
comment
OKE! Terima kasih atas penjelasan ini. - person D. O.; 12.12.2016