这段 SAS 代码块的作用是什么?

What does this block of SAS code do?

我有 sas 代码需要部分转换为 c++ 代码,但我很难理解它的功能。我没有使用 sas 的经验,经过几个小时的各种教程和示例后,我取得的进展很小。我无权访问任何输入数据或任何相应的输出。代码遵循以下格式,但我更改了变量名称:

data data1;
set data2;
output;

if type='ABCD' and zone=1 then do;
    type='BCDE'; spec='CDE'; sub='ABCD DEF'; output;
    type='EFGH'; spec='FGH'; output;
    type='ABCD'; spec='DEF';
end;

代码继续,不过我只需要理解这个if语句的逻辑即可。在实际代码中有很多这样的语句,但它们都遵循相同的结构,理解一个应该有助于我理解它们。变量值仅在类型和唯一性方面很重要,如果这里的变量共享一个值,那么在原始代码中也是如此,否则它们是不同的。

我知道该程序旨在采用 type/spec/zone 的组合并将它们转换为其他 type/spec 组合,但我似乎无法理解其中的逻辑。

DATA 和 SET 语句分别定义目标和源。

第一个 OUTPUT 语句将确保目标至少具有从源数据读取的每条记录的一个副本。

IF/THEN 语句的 DO END 块中的代码在运行时会导致写入两条额外的记录。如赋值语句所示,它们将具有不同的 TYPE、SPEC 和 SUB 变量值。在 DO 块的末尾,TYPE、SPEC 和 SUB 的值将分别设置为 'ABCD'、'DEF' 和 'ABCD DEF'。

因此,如果您的输入是

TYPE,SPEC,SUB,ZONE
ABCD,UNK,UNK,0
ABCD,XX,YY,1
UNK,UNK,UNK,0

您发布的代码部分写入的值将是。

TYPE,SPEC,SUB,ZONE
ABCD,UNK,UNK,0
ABCD,XX,YY,1
BCDE,CDE,ABCD DEF,1
EFGH,FGH,ABCD DEF,1
UNK,UNK,UNK,0