gpt4 book ai didi

SAS 将结果输出到输入数据集(输入和输出数据集名称相同)

转载 作者:行者123 更新时间:2023-12-04 22:32:43 27 4
gpt4 key购买 nike

我找不到有关此问题的信息,或者无法正确指定问题。

让我用代码提问:
是这个操作

data work.tmp;
set work.tmp;
* some changes to data here;
run;

或者特别是

proc sort data = work.tmp out = work.tmp;
by x;
run;

在 SAS 中是否有任何危险,或者被认为是不好的做法?请注意相同的输入和输出数据集名称,这是我的要点。 SAS 是否正确处理这种情况,以便运行此类数据步骤/过程时不会出现不明确的结果?

最佳答案

后者,自行分类,是相当频繁的;因为排序只是重新排列数据集,并且(除非您依赖于其他顺序,或者除非您使用 where 子句来过滤数据集或重命名/保留/删除选项)不会'不会对数据集造成任何永久性损害,只要 tmp 正在工作(或打算用作工作目录的 libname),这就不被认为是不好的做法。 SAS 创建一个临时文件来进行排序,成功后会删除旧文件并重命名临时文件;不存在重大腐败风险。

前者在数据步骤中将数据集设置为自身,通常不被认为是一个好的做法。这是因为数据步骤通常会执行一些不可逆转的操作 - 即,如果您运行它一次,它会产生与再次运行它不同的结果。因此,您可能不知道您的数据集处于什么状态;而使用排序时,您可以依赖于知道,因为如果大多数时候没有正确排序,您会得到一个明显的错误,而对于数据步骤,您可能永远不知道。因此,每个数据步骤通常应该生成一个新的数据集(至少对于该线程来说是新的)。有时有必要这样做,或者至少不这样做会造成很大的浪费 - 也许宏有时会执行长数据步骤,有时则不会 - 但通常您可以围绕它进行编程。

不过,从文件系统会变得困惑的意义上来说,这并不危险;与sort类似,SAS只会创建一个临时文件,填充新数据集,然后删除旧数据集并重命名临时文件。

(我不提诸如 modify 之类的事情,它必须将数据集设置为自身,因为这有一个明显的答案......)

关于SAS 将结果输出到输入数据集(输入和输出数据集名称相同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32046225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com