【发布时间】:2020-11-27 02:44:05
【问题描述】:
当第一行无关紧要时,我有以下代码可以很好地比较组中的行。
data want_Find_Change;
set WORK.IA;
by ID;
array var[*] $ RATING;
array lagvar[*] $ zRATING;
array changeflag[*] RATING_UPDATE;
do i = 1 to dim(var);
lagvar[i] = lag(var[i]);
end;
do i = 1 to dim(var) ;
changeflag[i] = (var[i] NE lagvar[i] AND NOT first.ID);
end;
drop i;
run;
不幸的是,当我使用每组有两行的数据集时,我得到不正确的返回,我假设是因为必须在比较中使用第一行。我怎样才能比较唯一的行和第二行的返回值。这不起作用:
data Change;
set WORK.Two;
by ID;
changeflag = last.RATING NE first.RATING;
run;
我拥有和想要的数据示例
Group Name Sport DogName Eligibility
1 Tom BBALL Toto Yes
1 Tom golf spot Yes
2 Nancy vllyball Jimmy yes
2 Nancy vllyball rover no
想要
Group Name Sport DogName Eligibility N_change S_change D_Change E_change
1 Tom BBall Toto Yes 0 0 0 0
1 Tom golf spot Yes 0 1 1 0
2 Nancy vllyball Jimmy yes 0 0 0 0
2 Nancy vllyball rover no 0 0 1 1
【问题讨论】:
-
请用数据而不是代码来说明您的问题。
-
您的代码是一个数据步骤。看不出这跟SQL有什么关系,所以把标签去掉了。
-
proc sql 在这里可能有用
-
使用提供的代码并将其调整到您的
want数据集,我能够获得所需的结果。