我有以下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进行此转换,这会导致输出错误。知道是什么导致了这个吗?
谢谢!
答案 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
,其余的应该没问题。