/*PROGRAMME qui sert à produire les formats de TEO2 à partir des tables de passages*/ /*A changer par l'utilisateur: dossier où se trouvent les tables de passages SAS (iso_teo2.sas7bdat etc.)*/ libname form_teo "V:\Immigration\sources\Classifications et nomenclatures\Special TEO2"; /*On charge les tables SAS de correspondance pays et nationalités ->3 nomenclature possibles en entrée : ISO/TCM/COG ->2 codes de sorties : PAYS/NATIONALITES On crée également les formats qui font correspondre au code TEO2 leur intitulé -> 4 niveaux de codes * 2 types d'intutilés (pays/Nat)*/ data iso_teo2; set form_teo.iso_teo2;run; data iso_teo2_nat; set form_teo.iso_teo2_nat;run; data tcm_teo2; set form_teo.tcm_teo2;run; data tcm_teo2_nat; set form_teo.tcm_teo2_nat;run; data cog_teo2; set form_teo.cog_teo2;run; data cog_teo2_nat; set form_teo.cog_teo2_nat;run; /*1-Formats qui font correspondre du code (TCM/ISO/COG) au code TEO2 (1 à 4 caractères), pour les pays et les nat*/ %Macro code_to_code; %let liste_form=tcm iso cog; %let liste_form2=code_tcm iso cog; %let type_form=;%let index_form=; %do i = 1 %to 3; /*tcm iso cog*/ %do j=1 %to 2 ; /* Pays et nationalités*/ %let code_form=%scan(&liste_form,&i); %let var_form=%scan(&liste_form2,&i); %if &j=1 %then %do; %let type_form=;%let index_form=;%end; %if &j=2 %then %do; %let type_form=_nat;%let index_form=_n;%end; data &code_form._teo2_4&type_form;set &code_form._teo2&type_form; start=&var_form;type='C';label=classif_teo2_4;fmtname ="$&code_form._teo2&index_form._4c"; keep start type label fmtname;run; data &code_form._teo2_3&type_form; set &code_form._teo2_4&type_form;fmtname ="$&code_form._teo2&index_form._3c";label=substr(label,1,3);run; data &code_form._teo2_2&type_form; set &code_form._teo2_4&type_form;fmtname ="$&code_form._teo2&index_form._2c";label=substr(label,1,2);run; data &code_form._teo2_1&type_form; set &code_form._teo2_4&type_form;fmtname ="$&code_form._teo2&index_form._1c";label=substr(label,1,1);run; proc format cntlin=&code_form._teo2_4&type_form;run; proc format cntlin=&code_form._teo2_3&type_form;run; proc format cntlin=&code_form._teo2_2&type_form;run; proc format cntlin=&code_form._teo2_1&type_form;run; /*Nettoyage de la work*/ proc datasets lib=work noprint; delete &code_form._teo2_4&type_form &code_form._teo2_3&type_form &code_form._teo2_2&type_form &code_form._teo2_1&type_form; quit; %end; %end; %mend; %code_to_code; /*2-Formats qui font correspondre du code TEO2 (1 à 4 caractères) à leur intitulés, pour les pays et les nat Note: il faut partir de la table Tcm_teo2 car elle inclut le code d'erreur "n'importe quel DOM"*/ %Macro code_to_intitule; %do i = 1 %to 4; /*nb caract*/ %do j=1 %to 2 ; /* Pays et nationalités*/ %if &j=1 %then %do; %let type_form=;%let index_form=;%end; %if &j=2 %then %do; %let type_form=_nat;%let index_form=_n;%end; data teo2_&i.c;set tcm_teo2&type_form; start=classif_teo2_&i;type='C';label=intitule_classif_teo2_&i;fmtname ="$teo2&index_form._&i.c_det"; keep start type label fmtname;run; proc sort data=teo2_&i.c nodupkeys; by start ;run; proc format cntlin=teo2_&i.c;run; /*Nettoyage de la work*/ proc datasets lib=work noprint; delete teo2_&i.c; quit; %end; %end; %mend; %code_to_intitule; /*Complément: format qui fait correspondre le code du département (TCM) au code territoire dans le TCM*/ data dep_tcm; set form_teo.dep_tcm; start=code_tcm_dep;type='C';label=code_tcm;fmtname ="$dep_tcm"; keep start type label fmtname;run; proc format cntlin=dep_tcm;run; /*Enregistrement du catalogue*/ proc catalog cat=formats;copy out=form_teo.teo2_pays_natio;run; /*Nettoyage de la work*/ proc datasets lib=work noprint; delete iso_teo2_nat iso_teo2 tcm_teo2 tcm_teo2_nat cog_teo2 cog_teo2_nat dep_tcm; quit;