我收到以下错误/警告:
WARNING: Apparent symbolic reference ARRAY_MONTH_COUNT not resolved.
ERROR: Too many variables defined for the dimension(s) specified for the array array1.
ERROR 22-322: Syntax error, expecting one of the following: an integer constant, *.
ERROR 200-322: The symbol is not recognized and will be ignored.
代码如下:
data demo_effective;
set work.demo;
array array1 [&array_month_count] $ 1 membsdemo_flag_&start_yrmo
membsdemo_flag_&end_yrmo;
length yrmo 6;
do i=1 to &array_month_count;
if array1[i] = 'N' then continue;
if array1[i] = 'Y' then yrmo = substrn(vname(array1[i]),20,6);
output;
end;
run;
我没有编写这个程序,我只是想尝试使用它,所以我不知道为什么这不起作用(我没有做任何更改,只是在SAS中运行程序)它已经坏了),我还在学习SAS和SQL,所以即使在观看了一些视频并试图找到更多相关信息之后,这个程序的一半对我来说也是无稽之谈。
如果有帮助,看起来像是在array1 [& array_month_count]周围发生警告/错误。
答案 0 :(得分:1)
&array_month_count
是一个宏变量。在SAS中,这是一个在编译时替换的字符串。宏"写"码。
看起来你得到的所有错误都是因为该变量没有值。
所以在代码的某处,应该有一些东西设置array_month_count
的值。找到它,修复它,这一步应该有效。
答案 1 :(得分:1)
比Dom的答案更详细一些可能会有所帮助,尽管他的答案肯定是问题的症结所在。
需要定义 &array_month_count
,但您可能还有其他一些问题。
array array1 [&array_month_count] $ 1 membsdemo_flag_&start_yrmo
membsdemo_flag_&end_yrmo;
这可能是错的,否则这段代码可能会做一些与以往不同的事情:我怀疑它的目的是
array array1 [&array_month_count] $ 1 membsdemo_flag_&start_yrmo - membsdemo_flag_&end_yrmo;
换句话说,它可能应该扩展到类似的东西。
array array1 [6] $ 1 membsdemo_flag_1701 membsdemo_flag_1702 membsdemo_flag_1703 membsdemo_flag_1704 membsdemo_flag_1705 membsdemo_flag_1706;
6
实际上并不需要,因为列出了变量(以浓缩形式)。短划线告诉SAS从头到尾用数字扩展连续数字;只有当你的yrmo
永远不会越过年边界时,它才有效。它可能--
是合适的 - 它告诉SAS以可变数字顺序扩展,如果你有连续出现的变量,它可以正常工作(换句话说,当你打开数据集时它们相邻) )。
然而第二位需要6。
do i=1 to &array_month_count;
除非你把它重写为:
do i = 1 to dim(array1); *dim = dimension, or count of variables in that array;
在这种情况下,您甚至不需要 值。
-
如果它实际上是上面的代码,并且只有2个变量,那么您不需要&array_month_count
,因为它已知只有2个变量。