Here a sample with data of what i was trying to achieve. As a recap the objective was to assign a default to columns that contains missing value. The example below is a simplified version but logic remain complete. The real code contains some conditional assignments and also different treatment for numeric and character columns. I am working with quite a large list of variables i need to set default for which was why i had wanted to bypass writing to Stmt (and maintain the length) and thought to go direct to macro variable. Noted the problem of 65k length restriction raised.. data Control_Table; length Column_Name Ref_Name Default_Value $20; infile datalines delimiter =','; input Column_Name $ Ref_Name $ Default_Value $; datalines; Customer_ID,CustID,-1 Customer_Name,CustNm,Unknown Customer_Group_ID,GrpID,-1 ; run; data Prep; set Control_Table; call symputx (Ref_Name, Default_Value); length Stmt $1000; Stmt = 'if missing('||strip(Column_Name)||') then do; ' ||strip(Column_Name)||'= "&'||strip(Ref_Name)||'"; ' ||'X_D_'||strip(Ref_Name)||'= 1; ' ||'end;' ; run; proc sql; select Stmt into:Default_Treament separated by ' ' from Prep; quit; %put %superq(Default_Treament); data Source_Data; length Customer_ID Customer_Name Customer_Group_ID $10; infile datalines delimiter =','; input Customer_ID $ Customer_Name $ Customer_Group_ID $; datalines; . ,CustomerA ,GRPA B12345 ,. ,. . ,CustomerX ,. ; run; data Output; set Source_Data; &Default_Treament.; run;
... View more