我刚刚意识到减少数字(虚拟和整数)变量的长度是多么有用,因为它节省了我的时间和磁盘空间。但是,我觉得在我的代码末尾使用长度语句比在提及" set"之前更方便。 (后一种方式是SAS博主和其他专家主要建议您使用长度声明)。
那么,这两种方式之间是否存在差异(参见下面的例子)?我无法找到输出上的任何差异,但我有点担心我可能做错了什么。你能解释一下有什么区别(如果有的话)以及为什么你更喜欢这样做。
提前致谢!
这是我如何使用长度语句的示例:
data b;
set a;
dummy = income > 10 000;
label "dummy = Income > 10 000";
length dummy 3;
run;
但专家建议您这样做。
data b;
length dummy 3;
set a;
dummy = income > 10 000;
label "dummy = Income > 10 000";
run;
答案 0 :(得分:3)
我发誓,在以前版本的SAS中,你不能覆盖一个由长度语句定义的变量长度或者#34;继承"来源数据。
我记得有关"变量长度的一些注释或警告......已经设置好了#34;。
在SAS 9.3中代码:
data a;
length income dummy 8.;
income = 1234567890;
dummy = 1234567890;
output;
stop;
run;
data b;
set a;
attrib dummy length = 3 label = "dummy = Income > 10 000";
dummy = income > 10000;
length dummy 8;
length dummy 5;
run;
创建一个长度为5的变量哑元,没有任何音符。 所以在我看来,行为已经发生了变化。以前,我说你最终会得到一个由源数据中明确定义或外观定义的变量。
然而,它确实无法帮助代码的可读性和可维护性,首先为变量赋值并在最后定义变量的基本属性。
顺便说一下,标签的正确定义是:label dummy = "dummy = Income > 10 000";
或者,您可能更喜欢ATTRIB
语句在单个语句中指定单个变量的各种属性。
data b;
set a (drop = dummy);
attrib dummy length = 3 label = "dummy = Income > 10 000";
dummy = income > 10000;
run;
答案 1 :(得分:3)
数字变量的长度可能随时改变,而字符变量可能只在创建之前完成。这是因为数字变量的长度只影响输出数据集;在PDV内部,无论任何长度语句,数字变量总是具有8个字节的精度。但是,字符变量的长度可能没有重新定义,因为与字符变量关联的PDV长度在最初定义后(在set语句或字符变量的第一个长度/属性/赋值中)是不可替代的。有关详细信息,请参阅LENGTH上的文档(尽管没有我希望看到的那么多)。
那就是说,我个人更喜欢格式化和前期而不是最后。部分原因是任何阅读该程序的人都知道最终的格式是什么;但大部分是一些长度/属性必须预先完成:特别是字符长度,以及需要提前指定类型(数字/字符)的任何变量,以便确保你得到正确的类型。如果你通常把长度放在最后,那么你最后会得到一些前面/后面的一些混合物,因此我宁愿在前面做所有事情以使其更有条理。