在SAS中,设置2个数据集时RETAIN有何用处,以及Python中的等效项?

问题描述 投票:0回答:2

我正在尝试将一些 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 行的情况下运行代码,但得到相同的输出。请帮忙。

谢谢你

python sas retain
2个回答
0
投票

在 SAS 中,RETAIN 语句用于在数据步骤的迭代中初始化和保留变量的值。但是,在您提供的代码片段中,RETAIN 语句似乎没有必要。它初始化变量 UEN、UEN_NO 和 FEE,但似乎没有达到特定目的,特别是因为这些变量是在数据步骤的后面使用 SET 语句设置的。

在 SAS 中,SET 语句从数据集中读取观测值,并将该观测值中的变量值复制到程序数据向量 (PDV)。在您的情况下,SET 语句正在读取数据集 DF_ADJ1 和 DF_ADJ2 中的观察结果,但 RETAIN 语句不会影响此过程。当您想要跨迭代传递值时,通常会使用 RETAIN 语句。如果您使用 Pandas,请尝试使用 pd.concat 沿行连接两个 DataFrame


0
投票

RETAIN 语句的真正目的是指示当数据步骤开始处理下一个观察时,数据步骤中正在计算的 NEW 变量的值不应将其值重置为缺失。

在该数据步骤中,RETAIN 语句的唯一目的是确保 UEN 和 UEN_NO 是数据集中的前两个变量。因此,当您打印或查看数据时,这两个数据将出现在第 1 列和第 2 列中。

这是因为数据步骤没有计算任何新变量。输入数据集中变量值的唯一来源。来自输入数据集的变量已经被“保留”。

它起作用的原因是因为 SAS 在数据步骤中创建它看到的变量列表。

人们使用 RETAIN 而不是其他语句来获得设置变量顺序的副作用的原因是,与其他语句(如赋值语句)中对变量名称的引用不同,SAS 在看到变量时不会强制为变量指定类型在 RETAIN 语句中。因此,类型和存储长度将取决于这些变量在源数据集中的定义方式。

© www.soinside.com 2019 - 2024. All rights reserved.