比较单元格条目和返回值在SAS中

时间:2017-10-07 16:09:44

标签: mysql sql sql-server sas sas-macro

只想比较单元格条目和返回值。

coustmer_NO  id   A1   A2   A3  A4   
1            5    10   20   45   0     
1            13   0    45   2    5  
2            4    0    10   7    8  
2            3    7    9    55   0        
2            10   0    0    0    0   
3            4    90   8    14   3             
3            10   20   7    4   15     

如何计算每个customer_no的ID(值> 030) 然后,出现030之前的最小值数。

预期的输出类似于:

cosutmer_no  ,   count_ac_num ,   values   
1                   2            1    
2                   1            1   
3                   1            3   

1 个答案:

答案 0 :(得分:0)

我建议转换为更垂直的结构。然后你可以开始尝试应用你的业务逻辑,虽然我很难理解它是什么。

假设引号没有意义(看起来有人有像"xxx"这样的字符串,其中有实际的引号字符写入CSV文件,所以添加额外的引号以保护现有的引号,以便它成为"""xxx""")你可以使用compress()函数删除它们。

然后,您可以将结果字符串拆分为3个字符的子字符串。

data want ;
  set have ;
  array h history1 history2 ;
  do history=1 to dim(h);
    h(history)=compress(h(history),'"');
    length index 8 value $3 ;
    do index=1 by 1 until (value=' ');
      value=substrn(h(history),3*(index-1)+1,3);
      if value ne ' ' then output;
    end;
  end;
  drop history1 history2;
run;

所以你最终得到这样的东西:

Obs    id    type    history    index    value

  1     1     13        1          1      STD
  2     1     13        1          2      STD
  3     1     13        1          3      058
  4     1     13        1          4      030
  5     1     13        2          1      STD
  6     1     13        2          2      030
  7     1     13        2          3      066
  8     1     13        2          4      036
  9     1     13        2          5      030
 10     1     13        2          6      STD
 11     1     13        2          7      STD
 12     1     13        2          8      STD
 13     1     13        2          9      STD
 14     1     13        2         10      STD
 15     1      3        1          1      STD
 16     1      3        1          2      STD
 17     1      3        1          3      STD
 18     1      3        1          4      XXX
 19     1      3        1          5      STD
 20     1      3        1          6      XXX
 21     1      3        1          7      S