我有二进制字符串,如'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声明?
非常感谢
亚伦
答案 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;