2017-10-07 4 views
0

, il suffit de comparer les entrées de cellule et les valeurs de retour.comparer les entrées de cellule et les valeurs de retour Dans SAS

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  

comment compter l'ID qui a (valeur> 030) pour chaque customer_no
, le nombre de valeurs min avant 030 apparaît.

Le résultat attendu serait quelque chose comme:

cosutmer_no , count_ac_num , values 
1     2   1  
2     1   1 
3     1   3 
+0

C'est mieux dans une étape de données que SQL et à l'aide SUBSTR – Reeza

+0

j'ai essayer de le faire, toujours face à un problème avec elle. –

+0

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

Répondre

0

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 
+0

Salut Tom, Merci beaucoup. Je dois le convertir dans un nouveau format. pourriez-vous s'il vous plaît vérifier la question à nouveau. –