如何解释数据帧上的 SAS 代码?

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

我有以下 sas 代码

data original_data;
    input x y z z1;
    datalines;
1 4 76 1
2 3 49 0
2 3 85 0
4 5 88 0
2 2 90 1
;
run;

/*view dataset*/
proc print data=original_data;


data original_data_1 ;
set original_data;
length New_Col $30.;
New_Col = 'AAA';
if (z > 80) then New_Col = 'BBB';

proc print data=original_data_1;

data data_2;
set original_data_1;
if first.y then zzz = "Y";
else delete;
by New_Col y;
run;

proc print data=data_2;

我无法理解这部分

if first.y then zzz = "Y";
else delete;
by New_Col y;

这里基本上发生了什么?

任何解释都会有帮助

sas
1个回答
0
投票

数据步骤中的 BY 组处理将创建 FIRST。最后。临时标志变量,指示当前观察是否是具有该命名变量值的观察组中的第一个(或最后一个)观察(在 BY 语句中所有先前变量的当前值内)。

因此 FIRST.Y 对于由 NEW_COL 和 Y 的值定义的每组观测值中的第一个观测值成立。

所以这个数据步骤

data data_2;
  set original_data_1;
  by New_Col y;
  if first.y then zzz = "Y";
  else delete;
run;

只为每组选择第一个观察值,因为所有其他观察值都被删除。它还使变量 ZZZ 在每次观察时都具有值“Y”。

请注意,使用 BY 语句时,数据步骤将期望数据已排序,除非将关键字 NOTSORTED 添加到 BY 语句。 您的示例数据集恰好具有在所有其他观测值之后 Z 大于 80 的观测值。 但对于其他数据,由于创建 NEW_COL 的步骤之后没有排序步骤,因此如果不在其之前添加排序步骤,此步骤很可能会失败。

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