Bonjour à tous,
J'ai une tables contenant des informations pour plusieurs établissements et je souhaiterais diviser cette table en fonction de la dernière variable "établissement". C'est à dire que si une ligne dans ma table a comme établissement "2BMAY" une table qui se nomme "2BMAY" soit créée et que dans celle-ci toutes les lignes de ma première table ayant comme établissement "2BMAY" soit collées dedans.
J'ai cherché sur le forum et j'ai essayer d'adapter 2 codes trouvés à mon programme, mais ils ne fonctionnent pas car ma variable établissement peut commencer par un ou deux chiffres.
Ci-dessous les codes avec respectivement leur message d'erreur:
Message d'erreur :
Code : 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 PROC SORT DATA=liste_investigation OUT=liste_investigation_temp ; BY etablissement ; RUN ; DATA _NULL_ ; SET liste_investigation_temp ; BY etablissement ; /* on lit les données par bloc */ RETAIN id ; IF FIRST.etablissement THEN DO ; id=0 ; DECLARE HASH hid (ORDERED: "A") ; /* les données sont triées */ hid.DEFINEKEY ("id") ; /* l'identifiant est le n° de ligne. Aucun intérêt mais il en faut un */ hid.DEFINEDATA ("IPP", "DATNAIS", "NUM_IDPAT", "DATINCID", "APPAREIL_REG", "COMMENTAIRE", "MOTIF_INVEST", "ETABLISSEMENT") ; /* variables conservées dans le résultat */ hid.DEFINEDONE () ; END ; id = id + 1 ; hid.ADD() ; IF LAST.etablissement THEN hid.OUTPUT (DATASET: "work."!!TRANSLATE(STRIP(etablissement),"____"," '.-")) ;/* on crée une table en sortie qui s'appelle comme la valeur de PRODUCT, modulo l'élimination des caractères spéciaux */ RUN ;
et le code :ERROR: La valeur 2BMAY n'est pas un nom SAS valide.
ERROR: Une erreur s'est produite durant la méthode instance OM_OUTPUT(505) de "DATASTEP.HASH"
Me créer les tables mais sans le chiffre au début donc les tables sont vides :
Code : 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 proc sql noprint; SELECT DISTINCT etablissement INTO :listtab separated BY " " FROM liste_investigation; CREATE TABLE listtab AS SELECT DISTINCT etablissement AS code FROM liste_investigation; quit; DATA _null_; SET listtab; call symput("code"||compress(put(_n_,3.)), code); call symput("nbcode",put(_n_,3.)); run; %macro manageoutput; DATA &listtab ; SET liste_investigation; %do i=1 %TO &nbcode.; IF etablissement="&&code&i." then output "&&code&i."; %end; run; %mend manageoutput; %manageoutput;
Quelqu'un aurait une idée comment corriger le code afin que mes tables soient créés avec le(s) chiffre(s) en début de nom de table ? Ou aurait une alternative à me proposer car moi je sèche depuis plusieurs jours.WARNING: The data set WORK.BMAY may be incomplete. When this step was stopped there were 0
observations and 8 variables.
WARNING: Table WORK.BMAY non remplacée car cette étape a été interrompue.
Merci par avance.
Partager