首页 > 解决方案 > SUBSTR(SCAN(...)) 及其内容

问题描述

我被要求找到下面程序中定义的 First 的长度,我认为它应该是 15,但答案说是 200。

我的想法是 SCAN(Author,1,',') 的值是 Agatha,但由于我没有定义它的长度,所以长度与 Author 相同,即 15。同样,First 的值是 A,因为它的第一个字母Agatha 的,但由于没有指定长度仍然是 15。

data test;
    Author='Agatha Christie';
    First=substr(scan(Author,1,','),1,1);
run;

proc contents;
run;

我不知道 200 是从哪里来的……我可以寻求帮助吗?

标签: sas

解决方案


在 SAS 9.4 之前,从 Scan 函数返回的可变长度过去是 200。但是 SAS 9.4 在 scan 函数中给出的可变长度与其操作的变量相同。因此,新的可变长度将是 15 而不是 @Craig 所说的 200。以下是 SAS 9.4 文档的信息。

在 DATA 步中,如果 SCAN 函数将一个值返回给尚未指定长度的变量,则该变量将被赋予第一个参数的长度。此行为与以前版本的 SAS 中的行为不同。在以前的版本中,创建长度为 200 的变量的代码可能会生成长度大于预期的变量。如果您需要 SCAN 函数为变量分配一个不同于第一个参数长度的值,请使用 LENGTH 语句。


推荐阅读