SAS中的虚拟变量

时间:2014-03-26 11:38:43

标签: sas

我想通过SN和Name将虚拟变量分配为OP。如果SN和Name则OP = 1,如果SN和Name<>到以前的名字,然后OP = 2,如果它重复然后OP = 2,相同的条件如下,请参阅下面的例子

 SN     NAME    OP
109034 SPANISH  1
109036 FRANCE   1
109036 SECURITE 2
109036 SECURITE 2
109036 SECURITE 2
109037 AOMlk    1
109037 SECPPAA  2
109037 CIVILE   3
109037 CIVILE   3
109038 FRANCE   1
109038 SECURITE 2
109038 SECURITE 2
109038 SECURITE 2
109039 GOVERNME 1
109039 GOVERNME 1
109039 GOVERNME 1
109041 ITALIA   1
109041 SOREML   2
109041 SOREML   2
109041 SOREML   2

我试过这段代码,我没有得到我想要的东西

data new2( keep=SN Name OP);
set new1;
by   SN  Name ;
retain OP(0);
if first.SN  and first.Name then OP=1;
else OP=OP+1;

run;

1 个答案:

答案 0 :(得分:1)

您的代码无法正常工作的原因是,当名称没有更改时,它会增加OP,并在更改时将其设置为1。

您需要执行以下操作来执行您尝试执行的操作:

data want;
  set have;
  by sn name notsorted;

  if first.sn then op = 1;
  else if first.name then op + 1;
run;