【问题标题】:Changing a variable length without getting a warning更改可变长度而不收到警告
【发布时间】:2016-12-27 20:22:14
【问题描述】:

我在数据集 OLD 上有一个名为 ID 的变量,我需要将长度从 13 更改为 12 以进行合并。以下是与此变量关联的元数据。

Variable Type Len Format Informat Label 
ID       Char  13   $12.     $12. 'Person ID'

(ID 的每个值的内容在这个文件中总是正好是 12 个字符)

当我尝试在 DATA 步中编辑 set 语句之前的长度时,我收到一条警告。当我同时编辑长度和格式时,也会发生同样的情况。

data NEW;
length ID $12;
format ID $12.;
set OLD;
run;

...
WARNING: Multiple lengths were specified for the variable AN_RESEARCHID by 
             input data set(s). This can cause truncation of data.

来自 SAS 社区论坛的示例似乎没有说明为什么会出现此警告,或者如何避免它。有什么想法吗?

【问题讨论】:

  • 您还应该找出为什么您有长度为 $13 的变量但格式为 $12 的原因。和 12 美元的信息。永久地依附于它。是否有可能第 13 个字符不是空的,但是由于附加的格式,您只是看不到值?
  • 感谢汤姆的建议。我已经确认第 13 个字符确实是空的 - 看起来在上游程序中生成随机 ID 的人设置的长度大于他们分配的整数中的数字。

标签: sas variable-length


【解决方案1】:

您可以在 SET 语句中重命名原始变量,并创建一个具有所需长度的新变量。然后在数据步骤中将新变量设置为等于旧变量。你不会收到警告。但当然,它警告您的内容仍然有效——也就是说,如果您的数据确实有 13 个字符,那么在将其插入长度较短的变量时,它会截断该值。

data NEW(drop=ID_orig);
length ID $12;
set old(rename=(ID=ID_orig));
ID= ID_orig;
run;

【讨论】:

  • 这行得通:)。但我真的问自己为什么 SAS 必须如此复杂......
【解决方案2】:

有一个名为 varlenchk 的 SAS 选项。通过将其临时设置为 NOWARN,您可以更改长度而不会发出任何警告。

options varlenchk = nowarn; * Turn off the warning prior to your operation;

/* your operations here */

options varlenchk = warn; * put it back on to be safe!;

查看此链接了解详情:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003269301.htm

【讨论】:

    【解决方案3】:

    Amw5G给出的答案是如果我无法更正ID的原始长度设置,我将如何解决这个问题。但是,您应该调查在上一步中更改原始长度分配。

    变量收到不需要的长度的一些原因是:

    如果将字符 VAR 分配给没有 LENGTH 语句的值,则 VAR 将采用分配给它的第一个值的长度。 EXAMPLE

    如果一个字符 VAR 由函数分配,例如 SCAN,它可以接收 200 的长度。CAT 函数将返回被连接的值的长度总和的长度。 EXPLANATION

    【讨论】:

    • Jay - 您的示例和文档链接非常有用。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2020-03-02
    • 1970-01-01
    • 2014-02-16
    • 2017-05-26
    • 2017-01-29
    相关资源
    最近更新 更多