char - SAS 在没有被要求的情况下将字符变量转换为数字

标签 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 进行此转换,这会导致输出错误。知道是什么原因造成的吗?

谢谢!

最佳答案

您肯定确实(隐含地)要求 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/

相关文章:

python - 使用 Regex 提取多行 SAS 代码

string - 根据 sas 中另一个字符变量的值重新编码字符变量中的值

c# - 如何将字符串 "brakemeup"转换为 char[stringlength] 数组?

mysql - 如何在SAS中自动添加id

java - 字符串到字符数组和字符串数组

c++ - 在 C++ 中,如果没有换行符,则不会打印字符串

sas - 用之前的非空白值填充变量的空白值 SAS 9.3

sas - 解析哈希声明中的宏变量?

关于 fgetc 使用的说明

ruby - 将字符分组以形成字符串