Bonjour,
Dans SAS si j'utilise une proc sql avec un union comme ceci :
Et qu'après je décide d'utiliser la fonction "coalesce" :Envoyé par SAS
Pour vous les résultats sont les mêmes ou sont différents ?Envoyé par SAS
Bonjour,
Dans SAS si j'utilise une proc sql avec un union comme ceci :
Et qu'après je décide d'utiliser la fonction "coalesce" :Envoyé par SAS
Pour vous les résultats sont les mêmes ou sont différents ?Envoyé par SAS
Salut,
Je ne suis pas un expert du langage, mais il me semble que dans le 1er cas tu peux appliquer 2 conditions, alors que dans le 2ème, tu n'en as qu'une.
Sur le papier, sauf erreur, ça ne peut pas donner le même résultat, sauf si on est dans certains cas particuliers.
Peux-tu décrire quelques cas, avec des valeurs attendues?
Bonjour
Dans notre cas " field3 " est une clef primaire strictement unique de type identifiant . Par exemple "ID123456" ou "ID123457" ...
" field1 " est un code gestion qui peut prendre des valeurs comme "00" , "01" , "02" ... , " field1 " est strictement rempli et jamais vide comme champ
" field2 " est un code gestion qui peut prendre des valeurs comme "10" , "11" , "12" ... , " field2 " est champ qui peut être vide ou bien rempli.
On imagine le jeu de données suivant :
field1;field2;field3
01;10;ID123456
01;11;ID123456
02;;ID123456
02;;ID123457
02;11;ID123457
02;11;ID123458
09;19;ID123459
09;;ID123459
Salut,
Si je comprends bien le jeu de données, je n'ai par contre pas compris les actions qui suivent. Tous les cas du jeu de données ne sont peut-être pas cités?
cas 1 : valeur;null;ID1
cas 2 : valeur;valeur;ID1
cas 3 : valeur;null;ID2
cas 4 : valeur;null;ID3
cas 5 : valeur;null;ID3
cas 6 : valeur;valeur;ID4
cas 7 : valeur;null;ID5
cas 8 : valeur;valeur;ID6
cas 9 : valeur;valeur;ID6
cas 10 : ...
Quels sont les cas de couples de valeurs que l'on peut rencontrer, et avec quelles occurrences ?
Quel est le résultat attendu dans la 2ème table, et avec quelles conditions?
Bonjour ,
J'ai une table d'entrée qui peut contenir 2 types de cas de remplissage "valeur1;valeur2;IDX" ou bien "valeur1;null;IDX" . "valeur1" est strictement rempli , "valeur2" peut être rempli ou null
On va faire un cas simple :
"valeur1" peut prendre les valeurs "00" à "09". "valeur2" peut prendre les valeurs "10" à "19" ou "null" .
Voici la liste des cas
Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 valeur1;valeur2 00;10 00;11 00;12 00;13 00;14 00;15 00;16 00;17 00;18 00;19 00;null 01;10 01;11 01;12 01;13 01;14 01;15 01;16 01;17 01;18 01;19 01;null 02;10 02;11 02;12 02;13 02;14 02;15 02;16 02;17 02;18 02;19 02;null 03;10 03;11 03;12 03;13 03;14 03;15 03;16 03;17 03;18 03;19 03;null 04;10 04;11 04;12 04;13 04;14 04;15 04;16 04;17 04;18 04;19 04;null 05;10 05;11 05;12 05;13 05;14 05;15 05;16 05;17 05;18 05;19 05;null 06;10 06;11 06;12 06;13 06;14 06;15 06;16 06;17 06;18 06;19 06;null 07;10 07;11 07;12 07;13 07;14 07;15 07;16 07;17 07;18 07;19 07;null 08;10 08;11 08;12 08;13 08;14 08;15 08;16 08;17 08;18 08;19 08;null 09;10 09;11 09;12 09;13 09;14 09;15 09;16 09;17 09;18 09;19 09;null
Je veux que la table 2 soit l'union de 2 tables : table 1bis > "valeur1;valeur2;IDX" union table 1ter > "valeur1;null;IDX" = table 2 .
/* condition */ > est une sous requête sur une autre table (par exemple "select champ1, champ2 from autretable3 ;" ) .
Comme "valeur2" peut être null , il est difficilement concevable de faire une requête sur vide ... SAS ne revera rien ...
Bonjour,
Après contrôle est ce que ces 2 requêtes :
Code SAS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 create table mytable as select field1 , field2 , field3 from mystarttable where cats(field1,'-',field2) = /* condition */ and field2 is not null union select field1 , field2 , field3 from mystarttable where cats(field1) = /* condition */ and field2 is null ;
sont égales à celle ci :
Code SAS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 create table mytable as select field1 , field2 , field3 from mystarttable where cats(field1,'-',coalesce(field2,' ') )= /* condition */ ;
J'ai trouvé un résultat identique .
/ ! \ attention " coalesce() " est une fonction SAS dont il convient de se méfier comme la peste. Eviter autant que possible son utilisation et priviligez le "union" / ! \
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager