数据,错误和警告的SAS数据步骤

时间:2017-08-07 16:35:06

标签: sas

我收到以下错误/警告:

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]周围发生警告/错误。

2 个答案:

答案 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个变量。