I have multiple ID tables to merge onto large DB (over 100M rows) and joining them with an proc SQL or index is time consuming. Most of these contain under 100 rows so if converted to if/elif logic it runs much faster. These tables can be update so I want this if else if logic to be updated dynamically. I have the following script which takes the table and create a "Code" column containing the if/else if logic and then a statement to assign to a macro variable. When I print the macro variable the if else if logic looks perfect. But when I try to include in my code or %put it I get the following error "ERROR 180-322: Statement is not valid or it is used out of proper order." at each else if statement. Would there be a simple way to resolve this or a better way to get to the same result? %MACRO CREATE_MERGE_LOGIC(LIBRARY, TABLE, KEY, VARIABLE, OUTPUT_VARIABLE);
DATA TEMP;
SET &LIBRARY..&TABLE.;
FORMAT CODE $666.;
IF _N_ = 1 THEN CODE = CAT("IF ",SYMGET('KEY')," = ",ID," THEN ",SYMGET('OUTPUT_VARIABLE')," = '",TRIM(&VARIABLE.),"';");
ELSE CODE = CAT("ELSE IF ",SYMGET('KEY')," = ",ID," THEN ",SYMGET('OUTPUT_VARIABLE')," = '",TRIM(&VARIABLE.),"';");
RUN;
PROC SQL NOPRINT;
SELECT CODE FORMAT=$666.
INTO : CREATE_CODE SEPARATED BY " "
FROM TEMP
;
QUIT;
%MEND;
... View more