【发布时间】:2019-09-26 10:29:56
【问题描述】:
我目前正在尝试创建一个宏,它将字符串的一部分设置为全局变量列表,其中字符串的各个部分由“-”分隔,例如,672-46-246 将生成三个全局变量、name2、name2、name4,分别称为672、46、246。还有一个 name1 是整个字符串的全局变量。但无论如何,我有能力将整个字符串放到一个全局变量中,但我在拆分它时遇到了麻烦。可能还有其他方法可以做到这一点,但我正在尝试做一个 for 循环来确定有多少“拆分”,即“-”,然后通过这些拆分对其进行子串化。现在我正在尝试找出有多少“拆分”,但代码正在返回
错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件是: &拆分。
不确定摘要中还包括什么。
代码如下
%GLOBAL C;
%LET C=1;
DATA _NULL_;
SET T_&scope.;
%DO I = 1 %TO &sqlobs.;
%GLOBAL name&C.;
CALL SYMPUT("name&C.", COL&I.);
%Counter(C);
CALL SYMPUT("splits", COUNTC(COL&I., "-"));
%DO J = 0 %TO &splits.;
%Counter(C);
%END;
%END;
RUN;
警告:未解决明显的符号引用拆分。 错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件是: &拆分。
【问题讨论】:
-
请清楚地表明您的输入是什么以及您想要什么作为输出。目前还不清楚您要做什么。如果您从宏变量开始,请显示 %LET 语句来分配初始值。如果您的输出是宏变量,则显示 %LET 语句来演示给定输入的预期输出。如果输入或输出是数据集,则显示创建数据集的数据步骤。
-
设置宏变量列表通常不是很有帮助。为什么不将单个宏变量中的值保留为分隔字符串并根据需要提取每个值?