SAS长度声明

时间:2014-10-14 09:11:03

标签: sas

我刚刚意识到减少数字(虚拟和整数)变量的长度是多么有用,因为它节省了我的时间和磁盘空间。但是,我觉得在我的代码末尾使用长度语句比在提及" 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;

2 个答案:

答案 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上的文档(尽管没有我希望看到的那么多)。

那就是说,我个人更喜欢格式化和前期而不是最后。部分原因是任何阅读该程序的人都知道最终的格式是什么;但大部分是一些长度/属性必须预先完成:特别是字符长度,以及需要提前指定类型(数字/字符)的任何变量,以便确保你得到正确的类型。如果你通常把长度放在最后,那么你最后会得到一些前面/后面的一些混合物,因此我宁愿在前面做所有事情以使其更有条理。