提问人:stranger12309 提问时间:11/16/2023 最后编辑:stranger12309 更新时间:11/20/2023 访问量:51
在 SAS 中,设置 2 个数据集时 RETAIN 有什么用,而在 Python 中等效的数据集有什么用?
In SAS, what is the use of RETAIN when setting 2 datasets, and the equivalent in Python?
问:
我正在尝试将一些 SAS 代码重新编码为 Python。我有以下SAS代码:
DATA DF_FINAL;
RETAIN UEN UEN_NO FEE;
SET DF_ADJ1 DF_ADJ2;
KEEP UEN UEN_NO FEE;
RUN;
我不明白 RETAIN 需要什么,我需要 Python 中的等效项。我尝试在没有 RETAIN 行的情况下运行代码,但得到相同的输出。请协助。
谢谢
答:
在 SAS 中,RETAIN 语句用于在数据步骤的迭代中初始化和保留变量的值。但是,在您提供的代码片段中,RETAIN 语句似乎没有必要。它初始化变量 UEN、UEN_NO 和 FEE,但似乎没有特定用途,特别是因为这些变量是在数据步骤后面使用 SET 语句设置的。
在 SAS 中,SET 语句从数据集中读取观测值,并将该观测值中的变量值复制到程序数据向量 (PDV) 中。在本例中,SET 语句从数据集 DF_ADJ1 和 DF_ADJ2 中读取观测值,但 RETAIN 语句不会影响此过程。当您想要跨迭代结转值时,通常使用 RETAIN 语句。如果您使用的是 Pandas,请尝试使用 pd.concat 沿行连接两个 DataFrame
RETAIN 语句的真正目的是指示在数据步骤开始处理下一个观测值时,在数据步骤中计算的 NEW 变量的值不应将其值重置为 missing。
在此步骤中,RETAIN的正式目的无效。这是因为数据步骤没有计算任何新变量。变量值的唯一来源是输入数据集。来自输入数据集的变量已经“保留”了。
因此,RETAIN 语句在该数据步骤中的唯一用途是确保 UEN 和 UEN_NO 是数据集中的前两个变量。因此,当您打印或查看数据时,这两个将出现在第 1 列和第 2 列中。
它之所以有效,是因为 SAS 按照它第一次看到变量的顺序在数据步骤中创建变量列表。
人们使用 RETAIN 而不是其他一些语句来获得设置变量顺序的副作用的原因是,与其他语句(如赋值语句)中对变量名称的引用不同,SAS 在 RETAIN 语句中看到变量时不会强制使用变量 TYPE。因此,类型和存储长度将由源数据集中如何定义这些变量来决定。
评论
好吧,我所知道的是,retain 语句中提到的那些变量将与它们在父数据集中保持相同,这意味着它们在迭代发生时不会像其他变量(和值)那样被处理,或者我们可以简单地说它们将跳过缓冲区并将直接放置在输出数据集中(也包括格式)。它为我们节省了时间和机器资源。
评论
retain