เลือกตัวแปรเฉพาะเมื่อมี 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;

โค้ดด้านบนจะสร้างตารางชื่อ SET3 และรวม VAR1 จาก 2 ชุดข้อมูล พร้อมด้วย VAR2 โดยที่ a.VAR1=b.VAR1

ฉันต้องการให้โค้ดนี้ทำงานเพื่อรวม VAR2 หากมี บางครั้งมันก็ไม่เป็นเช่นนั้นและโค้ดก็ขัดข้อง

ฉันสามารถทำได้โดยการเขียนโค้ดสองครั้งด้วยมาโครบางตัว แต่สงสัยว่ามีไวยากรณ์ SQL ที่รวดเร็วซึ่งสามารถใช้ได้หรือไม่

ขอบคุณมาก!


person Jason Rogers    schedule 12.12.2016    source แหล่งที่มา


คำตอบ (1)


ทางเลือกหนึ่งคือการสร้างตัวแปรมาโครที่จะมี VAR1 หรือ VAR1,VAR2 ขึ้นอยู่กับว่ามีอยู่หรือไม่ dictionary.columns คือตารางข้อมูลเมตาที่คุณสามารถรับได้ ซึ่งมีอยู่ใน proc sql

ลำดับของข้อมูลสุดท้ายจะแตกต่างออกไปเล็กน้อย (a.VAR1, a.VAR2, b.VAR1) แต่หวังว่าจะไม่เป็นปัญหา

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
กรุณาบรรทัดนี้มีไว้เพื่ออะไร? % ใส่ &=varlist.; หรือคุณหมายถึง : %put &varlist.; - person D. O.; 12.12.2016
comment
มันแค่ใส่ค่าของ &varlist ลงในบันทึก %put &=varlist. เป็นวิธีลัดในการเขียนโค้ด %put VARLIST=&varlist. - person Longfish; 12.12.2016
comment
ตกลง! ขอบคุณสำหรับคำอธิบายนี้ - person D. O.; 12.12.2016