SAS 检查每个 ID 和 Time 变量的两个值是否相同

SAS Check if for each ID and Time two values of a variable are the same

提问人:Froggy pete 提问时间:5/15/2023 更新时间:5/15/2023 访问量:114

问:

我有以下SAS数据集:


data old;
Input id Brand $ hour mode $ symbol $;
datalines;
11 Mercedes 23 ab sv
11 Porsche 22 as fu
11 BMW 12 ge ba
11 Audi 12 jb mu
19 Mercedes 03 ne wi
12 Porsche 03 ne od
12 BMW 23 nt vs
12 Audi 11 ns oy
13 Mercedes 03 jr wi
13 Porsche 03 ms iv
13 BMW 12 dj te
13 Audi 21 nr oy
14 Mercedes 03 cr nw
14 Porsche 03 dn. qe
14 BMW 23 mr na
14 Audi 11 nd sy
15 Mercedes 09 nw se
15 Porsche 10 WD TI
15 BMW 15 mw yd
15 Audi 14 00 wi
16 Mercedes 16 nn ss
16 Porsche 16 kk dd
16 BMW 23 vv cc
16 Audi 18 jk 55
;

我想写一个程序。对于梅赛德斯和保时捷品牌,每个相似 ID 的小时变量不能相同。例如:如果梅赛德斯和保时捷品牌的 ID=17 的小时数=23,则应创建一个名为 error 的新变量。

我在编写此代码时遇到问题,因为我必须查看多个观察结果。

有人有想法吗?

我尝试过使用二维数组,但它并没有真正的意义。

if 语句 变量 sas 比较

评论


答:

1赞 Reeza 5/15/2023 #1

在此处使用 BY 组处理,并检查小时是否是组的第一个/最后一个。

proc sort data=old;
by id hour;
run;

data want;
set old;
by id hour;
if not (first.hour and last.hour) then flag = 'Error';
run;

proc print data=want;run;

结果:

Obs id  Brand   hour    mode    symbol  flag
1   11  BMW 12  ge  ba  Error
2   11  Audi    12  jb  mu  Error
3   11  Porsche 22  as  fu   
4   11  Mercedes    23  ab  sv   
5   12  Porsche 3   ne  od   
6   12  Audi    11  ns  oy   
7   12  BMW 23  nt  vs   
8   13  Mercedes    3   jr  wi  Error
9   13  Porsche 3   ms  iv  Error
10  13  BMW 12  dj  te   
11  13  Audi    21  nr  oy   
12  14  Mercedes    3   cr  nw  Error
13  14  Porsche 3   dn. qe  Error
14  14  Audi    11  nd  sy   
15  14  BMW 23  mr  na   
16  15  Mercedes    9   nw  se   
17  15  Porsche 10  WD  TI   
18  15  Audi    14  00  wi   
19  15  BMW 15  mw  yd   
20  16  Mercedes    16  nn  ss  Error
21  16  Porsche 16  kk  dd  Error
22  16  Audi    18  jk  55   
23  16  BMW 23  vv  cc   
24  19  Mercedes    3   ne  wi  

您的 ID=17 示例不在您的数据中。

评论

1赞 Froggy pete 5/16/2023
谢谢!是的,我也刚刚注意到,一定是错别字