我有以下 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 进行此转换,这会导致输出错误。知道是什么原因造成的吗?
谢谢!
最佳答案
您肯定确实(隐含地)要求 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;
求和运算符保留,AND 的作用类似于sum()
,表示缺失加一为一(不缺失)。
所以这里最简单的解决方法是从保留语句中删除 count 0
,其余的应该没问题。
关于char - SAS 在没有被要求的情况下将字符变量转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27431570/