Les exemples utilisent des données générées (datalines) pour assurer leur autonomie.
1 Bloc de code
DATA STEP Data
Explication : Ce programme révisé met à jour un ensemble de données principal ('master') avec des informations provenant d'un ensemble de données de transaction ('transaction'). Il lit 'transaction' séquentiellement et 'master' directement à l'aide de l'instruction MODIFY avec l'option KEY= (sur PartNumber). Une instruction SELECT est utilisée pour contrôler le flux d'exécution en fonction de la valeur de la variable automatique _IORC_:
- Si une correspondance est trouvée (_SOK), la quantité est mise à jour et l'observation est remplacée.
- Si aucune correspondance n'est trouvée (_DSENOM), une nouvelle observation est ajoutée avec la quantité spécifiée dans 'transaction', et la variable _ERROR_ est réinitialisée pour éviter l'arrêt du programme.
- En cas de condition inattendue, un message d'erreur est affiché dans le log et le DATA step est arrêté. Les ensembles de données 'master_initial' et 'transaction' sont créés de manière autonome pour cet exemple.
Copié !
/* Création des données initiales */
data master_initial;
infile datalines;
input PartNumber Quantity;
datalines;
1 10
2 20
3 30
4 40
5 50
;
run;
proc sort data=master_initial out=master;
by PartNumber;
run;
proc sql;
create index PartNumber on master;
quit;
data transaction;
infile datalines;
input PartNumber AddQuantity;
datalines;
4 14
6 16
2 12
;
run;
proc sort data=transaction;
by PartNumber;
run;
/* Programme révisé avec gestion des erreurs */
data master;
set transaction;
modify master key=PartNumber;
select(_iorc_);
when(%sysrc(_sok)) do;
Quantity = Quantity + AddQuantity;
replace;
end;
when(%sysrc(_dsenom)) do;
Quantity = AddQuantity;
_error_ = 0;
output;
end;
otherwise do;
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
put 'Program terminating. DATA step iteration # ' _n_;
put _all_;
stop;
end;
end;
run;
proc print data=master;
title 'Master Data Set après mise à jour';
run;
1
/* Création des données initiales */
2
DATA master_initial;
3
INFILEDATALINES;
4
INPUT PartNumber Quantity;
5
DATALINES;
6
110
7
220
8
330
9
440
10
550
11
;
12
RUN;
13
14
PROC SORTDATA=master_initial out=master;
15
BY PartNumber;
16
RUN;
17
18
PROC SQL;
19
create index PartNumber on master;
20
QUIT;
21
22
DATA transaction;
23
INFILEDATALINES;
24
INPUT PartNumber AddQuantity;
25
DATALINES;
26
414
27
616
28
212
29
;
30
RUN;
31
32
PROC SORTDATA=transaction;
33
BY PartNumber;
34
RUN;
35
36
/* Programme révisé avec gestion des erreurs */
37
DATA master;
38
SET transaction;
39
modify master key=PartNumber;
40
41
select(_iorc_);
42
when(%sysrc(_sok)) DO;
43
Quantity = Quantity + AddQuantity;
44
replace;
45
END;
46
when(%sysrc(_dsenom)) DO;
47
Quantity = AddQuantity;
48
_error_ = 0;
49
OUTPUT;
50
END;
51
otherwise DO;
52
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
53
put 'Program terminating. DATA step iteration # ' _n_;
54
put _all_;
55
stop;
56
END;
57
END;
58
RUN;
59
60
PROC PRINTDATA=master;
61
title 'Master Data Set après mise à jour';
62
RUN;
2 Bloc de code
DATA STEP Data
Explication : Cet exemple crée un ensemble de données combiné ('combine') contenant la description et la quantité en stock pour chaque pièce d'une commande, en excluant les pièces non trouvées dans les ensembles de données 'master' et 'description'.
Le programme lit l'ensemble de données 'order' séquentiellement. Il utilise ensuite deux instructions SET avec l'option KEY= pour lire directement les ensembles de données 'description' et 'master' basés sur la valeur de 'PartNumber'.
Une variable 'Foundes' est utilisée pour suivre si une correspondance a été trouvée dans 'description'.
Des blocs SELECT sont utilisés après chaque instruction SET KEY= pour gérer les différentes conditions de retour (_IORC_):
- Si une correspondance est trouvée (_SOK), l'exécution se poursuit.
- Si aucune correspondance n'est trouvée (_DSENOM), une description par défaut est attribuée ('No description') ou un message d'avertissement est émis si la pièce n'est présente dans aucun des deux ensembles de données.
- En cas de condition inattendue, le programme affiche un message d'erreur et s'arrête.
Les ensembles de données 'master_initial', 'order_data' et 'description_initial' sont créés de manière autonome pour cet exemple.
Copié !
/* Création des données initiales */
data master_initial;
infile datalines;
input PartNumber Quantity;
datalines;
1 10
2 20
3 30
4 40
5 50
;
run;
proc sort data=master_initial out=master; by PartNumber; run;
proc sql; create index PartNumber on master; quit;
data order_data;
infile datalines;
input PartNumber;
datalines;
2
4
1
3
8
5
6
;
run;
proc sort data=order_data out=order; by PartNumber; run;
data description_initial;
infile datalines;
input PartNumber PartDescription $;
datalines;
4 Nuts
3 Bolts
2 Screws
6 Washers
;
run;
proc sort data=description_initial out=description; by PartNumber; run;
proc sql; create index PartNumber on description; quit;
/* Programme révisé avec gestion des erreurs */
data combine(drop=Foundes);
length PartDescription $ 15;
set order;
Foundes = 0;
set description key=PartNumber;
select(_iorc_);
when(%sysrc(_sok)) do;
Foundes = 1;
end;
when(%sysrc(_dsenom)) do;
PartDescription = 'No description';
_error_ = 0;
end;
otherwise do;
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
put 'Program terminating. Data set accessed is Description';
put _all_;
_error_ = 0;
stop;
end;
end;
set master key=PartNumber;
select(_iorc_);
when(%sysrc(_sok)) do;
output;
end;
when(%sysrc(_dsenom)) do;
if not Foundes then do;
_error_ = 0;
put 'WARNING: PartNumber ' PartNumber 'is not in'
' Description or Master.';
end;
else do;
Quantity = 0;
_error_ = 0;
output;
end;
end;
otherwise do;
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
put 'Program terminating. Data set accessed is Master';
put _all_;
_error_ = 0;
stop;
end;
end; /* ends the SELECT group */
run;
proc print data=combine;
title 'Combined Data Set après traitement';
run;
1
/* Création des données initiales */
2
DATA master_initial;
3
INFILEDATALINES;
4
INPUT PartNumber Quantity;
5
DATALINES;
6
110
7
220
8
330
9
440
10
550
11
;
12
RUN;
13
PROC SORTDATA=master_initial out=master; BY PartNumber; RUN;
14
PROC SQL; create index PartNumber on master; QUIT;
15
16
DATA order_data;
17
INFILEDATALINES;
18
INPUT PartNumber;
19
DATALINES;
20
2
21
4
22
1
23
3
24
8
25
5
26
6
27
;
28
RUN;
29
PROC SORTDATA=order_data out=order; BY PartNumber; RUN;
30
31
DATA description_initial;
32
INFILEDATALINES;
33
INPUT PartNumber PartDescription $;
34
DATALINES;
35
4 Nuts
36
3 Bolts
37
2 Screws
38
6 Washers
39
;
40
RUN;
41
PROC SORTDATA=description_initial out=description; BY PartNumber; RUN;
42
PROC SQL; create index PartNumber on description; QUIT;
43
44
45
/* Programme révisé avec gestion des erreurs */
46
DATA combine(drop=Foundes);
47
LENGTH PartDescription $ 15;
48
SET order;
49
Foundes = 0;
50
SET description key=PartNumber;
51
select(_iorc_);
52
when(%sysrc(_sok)) DO;
53
Foundes = 1;
54
END;
55
when(%sysrc(_dsenom)) DO;
56
PartDescription = 'No description';
57
_error_ = 0;
58
END;
59
otherwise DO;
60
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
61
put 'Program terminating. Data set accessed is Description';
62
put _all_;
63
_error_ = 0;
64
stop;
65
END;
66
END;
67
SET master key=PartNumber;
68
select(_iorc_);
69
when(%sysrc(_sok)) DO;
70
OUTPUT;
71
END;
72
when(%sysrc(_dsenom)) DO;
73
IF not Foundes THENDO;
74
_error_ = 0;
75
put 'WARNING: PartNumber ' PartNumber 'is not in'
76
' Description or Master.';
77
END;
78
ELSEDO;
79
Quantity = 0;
80
_error_ = 0;
81
OUTPUT;
82
END;
83
END;
84
otherwise DO;
85
put 'ERROR: Unexpected value for _IORC_= ' _iorc_;
86
put 'Program terminating. Data set accessed is Master';
87
put _all_;
88
_error_ = 0;
89
stop;
90
END;
91
END; /* ends the SELECT group */
92
RUN;
93
94
PROC PRINTDATA=combine;
95
title 'Combined Data Set après traitement';
96
RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
« Ne sous-estimez pas le "mode de vérification de la syntaxe". Avant de soumettre un script qui manipule des téraoctets de données dans CAS, exécutez-le une fois avec ce mode. Cela vous permet de valider toute la logique sémantique et les droits d'accès sans consommer de ressources de calcul coûteuses. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.