Sas 根据条件删除行

Sas 根据条件删除行,sas,Sas,我想根据某些条件删除SAS中的行(或观察):如果名称列中的第I个名称与第(I+1)个名称相同,并且第I个日期与第(I+1)个日期相同,请删除第(I+1)行。我还想删除行I+2、I+3等。如果这些列中的条目与行I中的条目相同。但是,如果前面的行被删除,这可能会迭代完成 我是SAS的新手。我知道我应该使用某种形式的循环,但我不知道如何使用它。这个问题已经困扰了我好几天了。我希望有人能帮助我。测试数据: +-----------+--------+-------+ | date | name

我想根据某些条件删除SAS中的行(或观察):如果名称列中的第I个名称与第(I+1)个名称相同,并且第I个日期与第(I+1)个日期相同,请删除第(I+1)行。我还想删除行I+2、I+3等。如果这些列中的条目与行I中的条目相同。但是,如果前面的行被删除,这可能会迭代完成

我是SAS的新手。我知道我应该使用某种形式的循环,但我不知道如何使用它。这个问题已经困扰了我好几天了。我希望有人能帮助我。

测试数据:

+-----------+--------+-------+
| date      | name   | value |
+-----------+--------+-------+
| 10MAY2019 | param1 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param1 | 2     |
+-----------+--------+-------+
| 10MAY2019 | param1 | 2     |
+-----------+--------+-------+
| 10MAY2019 | param2 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param3 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param4 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+
我的解决方案是通过连接参数生成密钥并保留它

data test;
format date date9.;
input name $6. value date yymmdd10.;
datalines4;
param1   1 2019-05-10
param1   2 2019-05-10
param1   2 2019-05-10
param2   1 2019-05-10
param3   1 2019-05-10
param4   1 2019-05-10
param5   1 2019-05-10
param5   1 2019-05-10
;;;;
run;

data want(drop=key);
   set test;
   retain key;
   if _N_ = 1 then do;
      key = strip(name) || strip(put(date,date9.));
      output;
   end;
   else if key ne strip(name) || strip(put(date,date9.)) then do;
      key = strip(name) || strip(put(date,date9.));
      output;
   end;
run;
结果:

+-----------+--------+-------+
| date      | name   | value |
+-----------+--------+-------+
| 10MAY2019 | param1 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param2 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param3 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param4 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+
测试数据:

+-----------+--------+-------+
| date      | name   | value |
+-----------+--------+-------+
| 10MAY2019 | param1 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param1 | 2     |
+-----------+--------+-------+
| 10MAY2019 | param1 | 2     |
+-----------+--------+-------+
| 10MAY2019 | param2 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param3 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param4 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+
我的解决方案是通过连接参数生成密钥并保留它

data test;
format date date9.;
input name $6. value date yymmdd10.;
datalines4;
param1   1 2019-05-10
param1   2 2019-05-10
param1   2 2019-05-10
param2   1 2019-05-10
param3   1 2019-05-10
param4   1 2019-05-10
param5   1 2019-05-10
param5   1 2019-05-10
;;;;
run;

data want(drop=key);
   set test;
   retain key;
   if _N_ = 1 then do;
      key = strip(name) || strip(put(date,date9.));
      output;
   end;
   else if key ne strip(name) || strip(put(date,date9.)) then do;
      key = strip(name) || strip(put(date,date9.));
      output;
   end;
run;
结果:

+-----------+--------+-------+
| date      | name   | value |
+-----------+--------+-------+
| 10MAY2019 | param1 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param2 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param3 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param4 | 1     |
+-----------+--------+-------+
| 10MAY2019 | param5 | 1     |
+-----------+--------+-------+

这是一个处理任务,可以使用
BY
语句和自动
先行。
BY group variable标志来解决

data want;
  set have;
  by date name;
  if first.name;
run;
如果按组行连续但未排序,则可以将
NOTSORTED
选项添加到
by
语句中


如果实际数据结构具有附加的“父级”分类变量,则需要在by group语句中使用附加变量,该类变量进一步扩展了组名称:日期(例如
insuranceCompany
policyGroup
,或
团队
).

这是一项处理任务,可以先使用
BY
语句和自动
BY group variable标志来解决

data want;
  set have;
  by date name;
  if first.name;
run;
如果按组行连续但未排序,则可以将
NOTSORTED
选项添加到
by
语句中


如果实际数据结构具有附加的“父级”分类变量,且该类变量进一步扩展了组名:日期(例如,
保险公司
保单组
,或
团队
),则需要在by group语句中使用附加变量。

如果i+2等于i+1和i,你需要对这个观察做些什么?(当然还有i+3等等)好问题,也许应该加上这个。我现在会的。如果有I+2等于I+1和I,你需要对这个观察做什么?(当然还有I+3等等)好问题,也许应该加上这个。我现在就来。