Je recommande la conversion à une structure plus verticale. Ensuite, vous pouvez commencer à essayer d'appliquer votre logique métier, même si j'ai du mal à comprendre ce que c'est. En supposant que les guillemets ne sont pas significatifs (on dirait que quelqu'un avait une chaîne comme "xxx"
qui contenait des guillemets qui étaient écrits dans un fichier CSV et donc des guillemets supplémentaires pour protéger les guillemets existants afin qu'il devienne """xxx"""
) vous pouvez simplement utiliser la fonction compress()
pour les supprimer.
Vous pouvez ensuite simplement diviser la chaîne résultante en sous-chaînes de 3 caractères.
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;
Alors vous vous retrouvez avec quelque chose comme ceci:
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
C'est mieux dans une étape de données que SQL et à l'aide SUBSTR – Reeza
j'ai essayer de le faire, toujours face à un problème avec elle. –
Expliquez la logique des numéros que vous avez affichés. Si vous comptez des valeurs> 30, pourquoi le client 2 en a-t-il 3 lorsqu'il n'y en a qu'un seul? Et pourquoi le client 3 a-t-il 0 alors il a aussi une valeur> 30? – Tom