我会建议转化为更多的垂直结构。然后,您可以开始尝试应用您的业务逻辑,但我很难理解这是什么。
假设的报价是没有意义的(看起来就像有人喜欢"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
来源
2017-10-08 15:04:25
Tom
这是不是SQL数据步更好,使用SUBSTR – Reeza
我已经尽力做到这一点,仍然面临一个问题吧。 –
解释您发布的号码的逻辑。如果您计算的值大于30,那么为什么客户2只有一个时有3。为什么客户3有一个0,那么它也有一个值> 30? – Tom