我在数据集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社区论坛的示例似乎没有描述为什么会发生此警告,或者如何避免它。有什么想法吗?
答案 0 :(得分:4)
您可以在SET语句中重命名原始变量,并创建一个具有所需长度的新变量。然后在数据步骤中将新变量设置为old。你没有得到警告。但是当然它会警告你仍然保持这种状态 - 也就是说,如果你的数据碰巧有13个字符,它会在将数据卡入长度较短的变量时截断该值。
data NEW(drop=ID_orig);
length ID $12;
set old(rename=(ID=ID_orig));
ID= ID_orig;
run;
答案 1 :(得分:2)
Amw5G给出的答案是如果我无法纠正ID的原始长度设置,我将如何解决这个问题。但是,您应该调查在前一步骤中更改原始长度分配。
变量收到不需要的长度的一些原因是:
如果将字符VAR分配给没有LENGTH语句的值,则VAR将获取分配给它的第一个值的长度。 EXAMPLE
如果字符VAR由函数指定,如SCAN,则它可以接收200的长度。CAT函数将返回值的长度总和的长度。被连接起来。 EXPLANATION
答案 2 :(得分: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