我有这个数据集:

 data test;
 input Feature_ID Client_ID;
 cards;
 52004 541111
 56222 541111
 56300 541111
 73222 980002
 73600 980002
 78006 980002
 85000 980002
 95001 1000001
 98020 1000001
 ;
 run;


我想创建一个标志列,每个客户的最大Feature_ID取1。

结果应如下:

 data test;
 input Feature_ID Client_ID Flag;
 cards;
 52004 541111 0
 56222 541111 0
 56300 541111 1
 73222 980002 0
 73600 980002 0
 78006 980002 0
 85000 980002 1
 95001 1000001 0
 98020 1000001 1
 ;
 run;


我该怎么做?

我做了什么(因为未排序原始数据),所以我开始使用Proc SQL对数据进行排序,方法如下:

 proc sql;
     create table tab_Trial as select
           Feature_ID
          ,Client_ID
       from Test
       order by Feature_ID, Client_ID;
  quit;


然后尝试此代码,以创建标志列

 data Flagging;
    set Tab_Trial;
    by Client_ID;
    if Last.Feature_ID = 1 then Flag = 1;
    else Flag = 0;
 run;


但是我得到了一个充满0的列标志。
任何帮助将非常感激。

最佳答案

尝试使用last.variable,但首先对数据集进行排序:

data test;
 input Feature_ID Client_ID;
 cards;
 52004 541111
 56300 541111
 56222 541111
 73222 980002
 73600 980002
 85000 980002
 78006 980002
 98020 1000001
 95001 1000001
 ;
 run;


 proc sort data=test out=test_sorted;
 by Client_ID Feature_ID;
 quit;


 data test1;
   set test_sorted;
   by Client_ID Feature_ID;
   if last.Client_Id then flag=1;
   else flag=0;
 run;


输入:

+------------+-----------+
| Feature_ID | Client_ID |
+------------+-----------+
|      52004 |    541111 |
|      56300 |    541111 |
|      56222 |    541111 |
|      73222 |    980002 |
|      73600 |    980002 |
|      85000 |    980002 |
|      78006 |    980002 |
|      98020 |   1000001 |
|      95001 |   1000001 |
+------------+-----------+


排序的数据集:

+------------+-----------+
| Feature_ID | Client_ID |
+------------+-----------+
|      52004 |    541111 |
|      56222 |    541111 |
|      56300 |    541111 |
|      73222 |    980002 |
|      73600 |    980002 |
|      78006 |    980002 |
|      85000 |    980002 |
|      95001 |   1000001 |
|      98020 |   1000001 |
+------------+-----------+


输出:

+------------+-----------+------+
| Feature_ID | Client_ID | flag |
+------------+-----------+------+
|      52004 |    541111 |    0 |
|      56222 |    541111 |    0 |
|      56300 |    541111 |    1 |
|      73222 |    980002 |    0 |
|      73600 |    980002 |    0 |
|      78006 |    980002 |    0 |
|      85000 |    980002 |    1 |
|      95001 |   1000001 |    0 |
|      98020 |   1000001 |    1 |
+------------+-----------+------+

关于sql - 如何基于功能ID的最大值创建标记列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57200400/

10-11 22:06
查看更多