i在旧数据集上有一个称为ID的变量,我需要将长度从13更改为合并。以下是与此变量关联的元数据。
Variable Type Len Format Informat Label
ID Char 13 $12. $12. 'Person ID'
(id的每个值的内容在此文件中始终是12个字符)
当我尝试在数据步骤中的设置语句之前编辑长度时,我会收到警告。当我同时编辑长度和格式时,也会发生同样的情况。
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个字符,则将其堵塞成较短长度的变量时会截断该值。
data NEW(drop=ID_orig);
length ID $12;
set old(rename=(ID=ID_orig));
ID= ID_orig;
run;
有一个称为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
如果我无法纠正ID的原始长度设置,则AMW5G给出的答案是如何解决此问题的。但是,您应该在上一步中调查更改原始长度分配。
变量收到不必要长度的某些原因是:
如果将字符var分配给没有长度语句的值,则var将获得分配给其的第一个值的长度。示例
如果字符var是由函数分配的,例如扫描,则可以接收200。猫函数将返回要串联值的值的长度。说明