Sorting 如果单个变量中的第一条语句是SAS,则使用

Sorting 如果单个变量中的第一条语句是SAS,则使用,sorting,sas,Sorting,Sas,你好:我有个问题。 我有这样一个sas数据集: data a; input id $ a b ; cards; ddd 12 1 ddd 22 1 ddd 44 2 ddd 50 1 ddd 52 1 ddd 88 2 ;run; 我希望我可以使用if first来标记obs湖: data a; input id $ a b flag $; cards; ddd 12 1 Y ddd 22 1 ddd 44 2 Y ddd 50 1 Y ddd 52 1 d

你好:我有个问题。 我有这样一个sas数据集:

data a;
input id $ a b ;
cards;
ddd 12  1
ddd 22  1
ddd 44  2
ddd 50  1
ddd 52  1
ddd 88  2
;run;
我希望我可以使用if first来标记obs湖:

data a;
input id $ a b flag $;
cards;
ddd 12  1  Y
ddd 22  1  
ddd 44  2  Y
ddd 50  1  Y
ddd 52  1  
ddd 88  2  Y
;run;
为此,我按ID、a、b对数据集进行排序,并尝试使用if first.b创建标志。但它用Y标记所有OB。我想这可能是我在b之前按a排序的原因。但是为了保持数据集的顺序,我必须按a,b对其进行排序。因此,我的问题是如何保持顺序并使用first.b创建标志?
谢谢。

我假设您使用的是a b设置的
first.b结合使用
。在这种情况下,
first.b
不起作用的原因是
first.b
对于a组中b的第一个值为真,在这种情况下,每个a中只有一个b

此替代方案应该有效,它保留以前的值b,并每次检查它

data flagged (drop=prev_b);
 set a;
 retain prev_b;
 if b ne prev_b then flag='Y';
 output;
 prev_b=b;
run;

我假设您使用的是a b设置的
first.b结合使用
。在这种情况下,
first.b
不起作用的原因是
first.b
对于a组中b的第一个值为真,在这种情况下,每个a中只有一个b

此替代方案应该有效,它保留以前的值b,并每次检查它

data flagged (drop=prev_b);
 set a;
 retain prev_b;
 if b ne prev_b then flag='Y';
 output;
 prev_b=b;
run;

您只需要在
BY
语句中使用
NOTSORTED
选项,以便SAS设置第一个。最后。我们需要他们的旗帜

data want ;
  set a ;
  by id b notsorted;
  flag = first.b ;
run;

您只需要使用
BY
语句中的
NOTSORTED
选项,以便SAS设置第一个。最后。我们需要他们的旗帜

data want ;
  set a ;
  by id b notsorted;
  flag = first.b ;
run;

如果您想知道为什么它不起作用,请包括您的代码。此外-在您的示例中,数据集是按id a b排序的
,但也可以认为它是按id b排序的
-在更大的数据集中是这样吗,或者b是否可以以不同的方式进行更改?如果需要帮助,请包含您的代码,说明为什么它不起作用。此外-在您的示例中,数据集是按id a b进行排序的
,但也可以认为它是按id b进行排序的
-这在您的较大数据集中是正确的,还是b可以以不同的方式进行更改?非常感谢。我试图找出如何以同样的逻辑获得最后一个OB,但仍然没有任何线索。你认为我们可以用同样的逻辑来应用它吗?非常感谢。我试图找出如何以同样的逻辑获得最后一个OB,但仍然没有任何线索。你认为我们可以用同样的逻辑来应用它吗?那太好了,正是我所需要的。非常感谢!那太好了,正是我所需要的。非常感谢!