mydata1是一个沉重的SAS数据集(假设是8GB)
这样做时:
data mydata2;
set mydata1;
new_column = column1 + column2;
run;
SAS将只用一个新列写一个新的8GB。 它有效吗?
无论如何,SAS只写入文件mydata1的末尾,以便优化I / O操作的数量?
谢谢!
答案 0 :(得分:1)
写入SAS数据集的方式,每个逻辑行都写在连续的块中;因此,如果不重写整个数据集,就不可能在适当的位置添加新变量。
如果你只是修改行或值,那是可能的;有关详细信息,请参阅MODIFY statement。这类似于SQL UPDATE
,DELETE
和INSERT
命令(同时!)。
就选项而言,您可以使用data step view
复制您想要的内容而无需I / O费用。
data mydata2/view=mydata2;
set mydata1;
new_column = column1 + column2;
run;
这不会将mydata2
写出到单独的数据集中,而是存储有关如何创建它的说明;然后,当它以后被使用时(它可以被用作数据集,除了它不能被sort
之类的东西修改),它上面有新的列。缺点是如果您多次使用它,每次使用它时都必须执行该操作;对于可能很昂贵的复杂操作(以上不会)。