SAS正在将字符变量转换为数字而不会被要求

时间:2014-12-11 20:12:03

标签: char sas

我有以下SAS代码:

DATA WORK.temp; 
SET WORK.proj;

RETAIN prev_time
       prev_name
       prev_type
       count 0;

FLAG = 0; 

IF( (prev_name = name) AND (prev_type NE type) AND (prev_type = 'x')) THEN DO; 
    TimeDifference = time - prev_time;
    IF( TimeDifference < 10*60) THEN DO;
        FLAG = 1;
        count + 1;
        END;
    END; 
prev_time = time;
prev_type = type;
prev_name = name;
RUN;

当我运行该程序时,我会得到记录,告诉我我的字符值已转换为数值:

注意:字符值已转换为数值

注意:数字数据无效,name ='somename'

注意:数字数据无效,name ='othername'

我从未要求SAS进行此转换,这会导致输出错误。知道是什么导致了这个吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

你当然确实要求SAS(隐含地)。

RETAIN prev_time
       prev_name
       prev_type
       count 0;

这不仅仅将count设置为0.它将所有四个变量设置为0,这是数字。因此prev_name是数字,当您说prev_name=name时(同时在IF语句和后面的作业中)都会得到此注释。

你可以在这里看到:

data test;
  retain x y z 0;
  put x= y= z=;
run;

所有三个变量都初始化为0,而不仅仅是z。代码中的换行没有任何意义(在SAS中是正常的)。

此外,您的count变量会以您所做的方式自动保留:

count+1;

sum运算符保留,AND的作用类似sum(),这意味着缺少加一是一(不缺)。

所以这里最简单的解决方法是从retain语句中删除count 0,其余的应该没问题。