Hello, I have a very strange issue. I am using %DO loops to generate nearly 800 variables in a SQL statement, but SAS is complaining of a syntax error. The strange part is that when I copy and paste the code from the log that is generated as a result of the %DO loops, the code runs perfectly fine! Here is the code: %macro one_year_ru(pref=pb,end_dt='13OCT2013',end=71,values=%str(30,90,180,270,365,545,730)); %let count = 7; proc sql; create table &pref._sales_ru as select party_id, %do i = 1 %to &count; %let value=%qscan(&values,&i,%str(,)); sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_interactions else 0 end) as num_interactions_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_trans else 0 end) as num_trans_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_rtrns else 0 end) as num_rtns_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_store_trans else 0 end) as num_store_trans_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_store_rtrns else 0 end) as num_store_rtrns_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_dir_trans else 0 end) as num_dir_trans_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_dir_rtrns else 0 end) as num_dir_rtrns_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then items_purchased else 0 end) as items_purchased_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_store_items else 0 end) as num_store_items_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then num_dir_items else 0 end) as num_dir_items_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then net_sales else 0 end) as net_sales_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then net_store_sales else 0 end) as net_store_sales_&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then net_dir_sales else 0 end) as net_dir_sales_&value , %do j=1 %to &end.; max(case when tran_date between &end_dt.d-&value. and &end_dt.d then if&j. else 0 end) as if&j._&value , sum(case when tran_date between &end_dt.d-&value. and &end_dt.d then iq&j. else 0 end) as iq&j._&value , %end; %end; max(tran_date) as last_purch_date from &pref..sales_oct14 where tran_date between &end_dt.d-730 and &end_dt.d group by 1 order by 1; quit; %mend; After invoking the macro, with default or changed parameters, SAS gives this error in the log: num_interactions_30 -- 22 -- 76 ERROR 22-322: Syntax error, expecting one of the following: ',', LEN, LENGTH. ERROR 76-322: Syntax error, statement will be ignored. When I look at the SQL statement generated in the log, there is clearly a COMMA: MPRINT(ONE_YEAR_RU): create table pb_sales_ru as select party_id, sum(case when tran_date between '13OCT2013'd-30 and '13OCT2013'd then num_interactions else 0 end) as num_interactions_30 , Any help is greatly appreciated!! Thank you!
... View more