SAS使用if语句循环子字符串索引

时间:2015-03-25 14:52:59

标签: sas

我有二进制字符串,如'100111111100001111111111000' 它在SAS中显示为char变量。 如何从1到0或0到1捕获每个变化? 我的想法输出就像

  

块引用

                       type  position
                        1-0      2
                        0-1      4
                        1-0      11
                        0-1      15
                        1-0      22

我坚持如何写一个递归语句。(过程就像20000字符串一样,每个字符串可能真的很长......)我想我可以拥有

  

零=指数(字符串, '0');一个指数=(字符串, '1');如果为零>那么   string = substr(string,zero);否则,如果为零

这是一个正确的方向吗?我应该如何处理DO LOOP声明?

非常感谢

亚伦

2 个答案:

答案 0 :(得分:4)

对我来说似乎很合理。略有简化。

do position = 1 to length(String)-1;
  if subpad(string,position,2)='10' then do;
    ... output a row for the 1-0 change ...
  end;
  else if subpad(string,position,2)='01' then do;
    ... output a row for the 0-1 change ...
  end;
end;

随着你做任何想要输出的事情(我假设把变量设置为'1-0'然后output;)。

我使用SUBPAD有点习惯,只要正确检查字符串长度,SUBSTR就可以正常工作。如果SUBPAD超过字符串的结尾就不会出错。

答案 1 :(得分:0)

Please try these codes to see if this is what you are looking for

data have (keep=type pos);
retain type pos;
x = '100111111100001111111111000';
ct01 = count(x,'01');
ct10 = count(x,'10');

pos = 1;
do i =1 to ct01;
  pos = find(x,'01',pos)+1;
  type='0-1';
  output;
end;

pos = 1;
do i =1 to ct10;
  pos = find(x,'10',pos)+1;
  type='1-0';
  output;
end;

run;

proc sort data=have;
by pos;
run;