我不久前发布了一个关于修剪宏变量的问题,我用它从Yahoo Finance下载一个CSV,其中包含每个传递到站点的变量信息 . 建议我实现这一目标的代码如下:
data _null_;
a = "&testvar.";
call symputx('svar',trim(input(a,$8.)));
run;
这很有效,但是我需要重新设计代码,以便我声明多个宏变量并同时提交多个宏变量 .
要同时声明多个宏,我使用了以下代码行:
%let svar&e. = &svar.;
%put stock_ticker = &&svar&e.;
变数&e . 是一个迭代变量,每次都会增加一个 . 这声明了与名为&svar的宏看起来相同的宏 . 每次将它们放入日志中时,新的动态宏现在都会抛出以下原始警告消息:
WARNING: The quoted string currently being processed has become more than 262 characters long. You
may have unbalanced quotation marks.
在我开始使用我原来问题中建议的symputx选项之前,我得到了 .
下面列出了此特定嵌套宏的完整代码:
%macro symbol_var;
/*here the start row and end row created in the macro above are passed to this nested macro and then passed through the*/
/*source dataset. at the end of the loop each ticker macro variable is defined in turn for use in the following nested*/
/*macro, symbol by metric.*/
%do e = &beg_point. %to &end_point. %by 1;
%put stock row in dataset nasdaq ticker = &e.;
%global svar&e;
proc sql noprint;
select symbol
into :testvar
from nasdaq_ticker
where monotonic() = &e.;
quit;
/*convert value to string here*/
data _null_;
a = "&testvar.";
call symputx('svar',trim(input(a,$8.)));
run;
%let svar&e. = &svar.;
%put stock_ticker = &&svar&e.;
%end;
%mend;
%symbol_var;
任何人都有任何建议如何声明宏&& svar&e . 直接进入调用synputx步骤?它当前抛出一个错误,表示正在创建的宏变量不能包含任何特殊字符 . 我已经尝试使用&QUOTE,%NRQUOTE和%NRBQUOTE但是我在无效的上下文中使用了该函数,或者我没有完全正确的语法 .
谢谢