Share & print

Constructed variables

Variable créée par Marie-Caroline Compans / Variable created by Marie-Caroline Compans, 31/10/2018

Nom de variable / Variable name

DATE_NAI_99

Description

L'EDP comprend des trous de collecte pour l’enregistrement des naissances à l’état civil ayant eu lieu entre 1982 et 1997 pour les individus EDP nés les 2 et 3 octobre. On dispose cependant d’informations quant à l'année de naissance des enfants présents dans le ménage à partir du recensement exhaustif de 1999. Pour étudier un phénomène statistiquement rare, utiliser cette source en complément de l’état civil (base Descendance) peut être utile pour augmenter les effectifs, en ne se limitant pas qu'à ceux nés le 1er ou 4 octobre pour étudier la fécondité. Le programme ci-dessous s’applique à l’étude des naissances de rang un, mais peut être adapté aux rangs de naissance supérieurs.

Between 1982 and 1997, some birth certificates are missing for EDP individuals born on October 2th and 3th. However, information on the date of birth of children in the household is available from the 1999 exhaustive census. To study a statistically rare phenomenon, using this source along with birth registrations (‘Descendance’ database) may be useful to increase sample sizes to study fertility, not only those born on October 1st or 4th to study fertility. The program below applies to the study of first births, but it can be adapted to higher birth orders.

Fichiers concernés / datafiles used

Recensement/Census 1999: EDP_BE20nn_RP1999

Valeurs de la variable / Variable values

Numérique/Numeric

Variables utilisées en entrée / Required input variables

Identifiant EDP / Identifier : ID_DIFF

Année de naissance de l’enfant i du ménage de l’individu EDP / Year of birth of child i in the household : AN01E99--AN08E99

Mois de naissance de l’enfant i du ménage de l’individu EDP / Month of birth of child i in the household : MN01E99--MN08E99

Jour de naissance de l’enfant i du ménage de l’individu EDP / Day of birth of child i in the household : JN01E99--JN08E99

NB : i de 1 à 8 car à partir de 9, les dates de naissance renseignées ne sont pas cohérentes (ex : 9222)

Programme SAS OU Stata / Stata-code OR SAS-code Citation / Citing

Libname source "\\casd.fr\casdfs\Projets\XXXXXX\Data\EDP_EDP_20nn";

 

Data RP99; Set source.EDP_BE2016_RP1999;

Keep ID_DIFF AN01E99--AN08E99 MN01E99--MN08E99 JN01E99--JN08E99; run;

 

/* AN0i99 MN0i99 JN0i99 : Les numéros associés à un enfant i du ménage n'indiquent pas le rang de naissance. Ils sont classés par rang inverse de naissance. Par exemple, si un ménage compte deux enfants, l'enfant n°2 correspond à la première naissance tandis que l'enfant n°1 correspond au plus jeune.

On transpose donc chaque information pour obtenir la date de naissance du premier enfant.

On procède ainsi pour l’année, puis le mois, et enfin le jour de naissance: */

 

/* AN0i99 MN0i99 JN0i99 : Digits associated with a child in the household do not indicate birth orders. They are classified by reverse order. For instance, if there are two children in a household, child #2 is the oldest one (first birth), child #1 the youngest.

Each information is transposed to get the day of birth of the first child, first for the year of birth, before the month of birth and finally the day of birth */

 

  * ANNEE DE NAISSANCE;

Proc sort data=RP99; By ID_DIFF; Run;

* Transposée qui contient une colonne comportant les années de naissance des enfants présents dans le ménage de l'individu EDP / The transposition includes a column with years of birth of children in the household;

Proc transpose data=RP99 out=RP99_T (drop=_NAME_ _LABEL_);

                     By ID_DIFF;

                     Var AN01E99--AN08E99; run;

 

* Tri de la table par identifiant EDP et par année de naissance des enfants présents dans le ménage / Sorting the transposition by EDP identifier and the year of birth of children in the household;

Proc sort data=RP99_T; By ID_DIFF COL1; run;

* Suppression des observations sans enfant / Observations with no children are deleted;

Data RP99_ANNEE; Set RP99_T; IF COL1='' then delete;

* Calcul du rang de naissance / Birth order;

Proc sort data=RP99_ANNEE; By ID_DIFF;

Data RP99_ANNEE; Set RP99_ANNEE; 

* Rang; By id_diff; If first.id_diff then rang=1; Else rang+1;

               Rename COL1=ANNEE_1;

Run ;

 

* Premières naissances / First births;

Data RP99_FIRST_ANNEE; Set RP99_ANNEE; By ID_DIFF; If first.id_diff; Drop RANG;

* Suppression des tables inutiles / Needless tables are deleted;

PROC DATASETS Library=work; DELETE RP99_ANNEE RP99_T; run;

 

* Idem ensuite pour le mois et le jour / Idem for the month and day of birth ;

 

* MOIS DE NAISSANCE / MONTH OF BIRTH;

Proc transpose data=RP99 out=RP99_T (drop=_NAME_ _LABEL_) ;

      By ID_DIFF ;

      Var MN01E99--MN08E99 ;

Proc sort data=RP99_T; By ID_DIFF COL1; run;

Data RP99_MOIS; Set RP99_T; IF COL1='' then delete;

Proc sort data=RP99_MOIS; By ID_DIFF;

Data RP99_MOIS; Set RP99_MOIS; 

      By id_diff; If first.id_diff then rang=1; Else rang+1;

      Rename COL1=MOIS_1;

Run ;

 

      * Premières naissances / First births;

Data RP99_FIRST_MOIS; Set RP99_MOIS; By ID_DIFF; If first.id_diff;  Drop RANG;

PROC DATASETS Library=work; DELETE RP99_MOIS RP99_T; run;

 

* JOUR DE NAISSANCE / DAY OF BIRTH;

Proc transpose data=RP99 out=RP99_T (drop=_NAME_ _LABEL_) ;

      By ID_DIFF ;

      Var JN01E99--JN08E99;

Proc sort data=RP99_T; By ID_DIFF COL1; run;

Data RP99_JOUR; Set RP99_T; IF COL1='' then delete;

Proc sort data=RP99_JOUR; By ID_DIFF;

Data RP99_JOUR; Set RP99_JOUR; 

      By id_diff; If first.id_diff then rang=1; Else rang+1;

      Rename COL1=JOUR_1;

Run ;

 

      * Premières naissances/ First births;

Data RP99_FIRST_JOUR; Set RP99_JOUR; By ID_DIFF; If first.id_diff; Drop RANG;

PROC DATASETS Library=work; DELETE RP99_JOUR RP99_T RP99; run;

 

* FUSION des tables année, mois et jour des 1eres naissances;

* Tri des tables;

Proc sort data=RP99_FIRST_ANNEE; By ID_DIFF;

Proc sort data=RP99_FIRST_MOIS; By ID_DIFF;

Proc sort data=RP99_FIRST_JOUR; By ID_DIFF;

 

Data RP99_DATENAIS; MERGE RP99_FIRST_ANNEE

                       RP99_FIRST_MOIS; 

                       By ID_DIFF;

Data RP99_DATENAIS; MERGE RP99_DATENAIS

                 RP99_FIRST_JOUR; 

                       By ID_DIFF;

Run;                                                

 

* Suppression des tables inutiles ;

PROC DATASETS Library=work; DELETE RP99_FIRST_ANNEE RP99_FIRST_MOIS RP99_FIRST_JOUR; run;

 

* La table finale contient l'année, le mois et le jour de naissance du 1er enfant par individu EDP.

Compilation ces trois variables pour obtenir une naissance au format date SAS

The final table contains the year, month and day of birth of the first child in the household for every EDP individuals. These three variables can also be used to get a birth date in SAS date format.

 

Data RP99_DATENAIS; Set RP99_DATENAIS;

* Conversion au format numérique;

ANNEE1 = input(ANNEE_1,4.);   MOIS1=input(MOIS_1,2.) JOUR1=input(JOUR_1,2.);

* Conversion au format date;

DATE_NAI_99=MDY(MOIS1,JOUR1,ANNEE1); Format DATE_NAI_99  date9.; run;

* Suppression des variables inutiles;

Data RP99_DATENAIS; Set RP99_DATENAIS; Drop ANNEE_1 MOIS_1 JOUR_1; run;

 

Commentaire / Any other comment

Lorsque le (premier) enfant du ménage est né entre 1982 et 1997 (ANNEE1) pour les individus EDP nés les 2 et 3 octobre, DATE_NAI_99 peut être utilisée pour calculer l’âge au premier enfant. Sinon, il faut utiliser des bulletins d’état civil (table Descendance de l’EDP).

When the (first) child in the household was born between 1982 and 1997 (ANNEE1) for EDP individuals born on October 2th and 3th, DATE_NAI_99 can be used to calculate the age at first birth. Otherwise, you may use birth registrations (‘Descendance’).

Variable créée par Benjamin Marteau, 19/09/2018

Nom de variable / Variable name

tcdouble

poids_double

Description

Ces variables identifient le type de commune (moins ou plus de 10000 habitants) dans lesquels se trouvent les individus comptés deux fois au recensement, et les poids associés à ces doubles comptes. Sont exclus les individus recensés plus de deux fois, ainsi que les doubles « purs » situés dans un même logement. Le programme contenu sous l’onglet « individus en double compte dans les enquêtes annuelles de recensement » doit être executé au prélable.

Fichiers concernés / datafiles used

EDP_B2016_EAR2004_INDIVIDU (EAR2004 à 2016)

EDP_BE2016_EAR2004_LOGEMENT (EAR2004 à 2016)

Valeurs de la variable / Variable values

tcdouble :

1 / Même petite commune (moins de 10000 habitants)

2 / Même grande commune (plus de 10000 habitants), même adresse

3 / Même grande commune, adresses différentes

4 / Petites communes différentes

5 / Petite et grande commune

6 / Grandes communes différentes

poids_double : continu

Variables utilisées en entrée / Required input variables

ID_DIFF / identifiant individuel

ID_LOG_DIFF / identifiant du logement

ANNEE_COL / année de collecte

ADR_DIFF / Adresse (créée en concaténant la commune, l'ilôt, le rang de l'adresse)

BI_EDP / Individu EDP

Programme SAS OU Stata / Stata-code OR SAS-code

** Espace de travail ;

libname EDP '\\casd.fr\casdfs\Projets\AQRDEDA\Data\EDP_EDP_2016' ;

 

** On récupère la variable doublecompte déjà créée dans l’onglet « individus en double compte dans les enquêtes annuelles de recensement » et la base de données EAR0416 ;

 

data EAR0416 ; set EAR0416 ; run ; ** Base de données créée lors de la creation de la variable doublecompte;

 

** Création d’un fichier avec uniquement les doubles comptes ;

data doublecomptecom ; set EAR0416 ;

if doublecompte in (0,.) then delete ;

run ;

 

proc sort data = doublecomptecom ; by ANNEE_COL ID_DIFF poids_ea ;

 

** Fichier détaillant la répartition des bulletins doubles par type de commune ;

data doublecomptecombis ; set doublecomptecom (keep = ANNEE_COL ID_DIFF ADR_DIFF DEPCOM_CODE TC BI_EDP poids_ea poids_ea_cale); by ANNEE_COL ID_DIFF poids_ea ;

keep ID_DIFF ANNEE_COL tcdouble rappoids prodpoids moypoids ;

length iddiff1-iddiff2 $10 adrdiff1-adrdiff2 $16 depcom1-depcom2 $5 tc1-tc2 $1 ;

retain nbid 0 iddiff1-iddiff2 "" adrdiff1-adrdiff2 "" depcom1-depcom2 ""  tc1-tc2 "" poids1-poids2 0 rappoids1-rappoids2 0 prodpoids1-prodpoids2 0 moypoids1-moypoids2 0

tcdouble1-tcdouble2 0 ;

array viddiff(2) $ iddiff1-iddiff2 ;

array vadrdiff(2) $ adrdiff1-adrdiff2 ;

array vdepcom(2) $ depcom1-depcom2 ;

array vtc(2) $ tc1-tc2 ;

array vtcdouble(2) tcdouble1-tcdouble2 ;

array vpoids(2) poids1-poids2 ;

array vrappoids(2) rappoids1-rappoids2 ;

array vprodpoids(2) prodpoids1-prodpoids2 ;

array vmoypoids(2) moypoids1-moypoids2 ;

if BI_EDP='1' then do ;

if first.ID_DIFF then do ;

                nbid=0 ;

                do i = 1 to 2 ;

                viddiff(i)="" ; vadrdiff(i)="" ; vdepcom(i)="" ; vtc(i)= "" ; vtcdouble(i)=0 ; vpoids(i)=0 ; vrappoids(i)=0 ; vprodpoids(i)=0 ; vmoypoids(i)=0;

                end ;

end ;

nbid=nbid+1 ;

viddiff(nbid)=ID_DIFF ;

vadrdiff(nbid)=ADR_DIFF ;

vdepcom(nbid)=DEPCOM_CODE ;

vtc(nbid)=TC ;

vpoids(nbid)=poids_ea ;

if last.ID_DIFF then do ;

                do i = 1 to nbid ;

                               do j = 1 to nbid ;

                                               if vdepcom(i) = vdepcom(j) then do ;

                                                               if vtc(i)=vtc(j) & vtc(i)="1" then vtcdouble(i)=1; ** Même petite commune ;

                                                               else if vtc(i)=vtc(j) & vtc(i)="2" then do ;

                                                                                              if ANNEE_COL>2009 & vadrdiff(i)=vadrdiff(j) then vtcdouble(i)=2 ; ** Même grande commune, mm adresse ;

                                                                                              else if ANNEE_COL>2009 & vadrdiff(i) NE vadrdiff(j) then vtcdouble(i)=3 ; ** Même grande commune, adresse diff ;

                                                                                              if ANNEE_COL<=2009 then vtcdouble(i)=2 ; ** Même grande commune ;

                                                                               end ;

                                                               end ;

                                               if vdepcom(i) NE vdepcom(j) then do ;

                                               if vtc(i)=vtc(j) & vtc(i)="1" then vtcdouble(i)=4 ; ** Petites communes différentes ;

                                               else if vtc(i) NE vtc(j) & vtc(i)="1" then vtcdouble(i)=5 ; ** 1er logement : petite commune, 2eme : grande com ;

                                               else if vtc(i) NE vtc(j) & vtc(i)="2" then vtcdouble(i)=5 ; ** 1er log : grande commune, 2eme log : petit com ;

                                               else if vtc(i)=vtc(j) & vtc(i)="2" then vtcdouble(i)=6 ; ** Grandes communes différentes;

                                               end ;

                                               vrappoids(i)=vpoids(j)/vpoids(i) ; ** Rapport de poids entre les deux bulletins ;

                                               vprodpoids(i)=vpoids(i)*vpoids(j); ** Produit des poids entre les deux bulletins ;

                                               vmoypoids(i)=(vpoids(i)+vpoids(j))/2 ; ** Moyenne des poids entre les deux bulletins ;

                               end ;

                end ;

                do i = 1 to nbid ;

                tcdouble=vtcdouble(1) ;

                iddiff=viddiff(i) ;

                rappoids=vrappoids(1) ;

                prodpoids=vprodpoids(1) ;

                moypoids=vmoypoids(1) ;

                output ;

                end ;

end ;

end ;

run ;

 

proc sort data = doublecomptecom ; by ANNEE_COL ID_DIFF ;

proc sort data = doublecomptecombis ; by ANNEE_COL ID_DIFF ;

 

** Si les deux bulletins sont situés dans la même grande commune et que le rapport de poids est 1, alors on suppose qu'ils sont à la même adresse

** Valable pour les années avant 2009 ou on n'a pas l'info de la meme adresse ;

data doublecompteall ; merge doublecomptecom doublecomptecombis ; by ANNEE_COL ID_DIFF ;

if tcdouble=2 & rappoids NE 1 & annee_col<=2009 then tcdouble=3 ;

run ;

 

** Application d’une variable de pondération en fonction de la probabilité de sélection des individus dans un logement ;

data doublecompteall ; set doublecompteall ;

if nobs=1 then do ;

                if tcdouble in (1,2) then poids_double=moypoids ; ** Même commune, poids moyen ;

                if tcdouble in (3,4,5,6) then poids_double=prodpoids ; ** Communes différentes ou addresses différentes: produit des poids ;

end ;

run ;

 

** Pour avoir la répartition par type de commune des doubles comptes ;

proc freq data = doublecompteall ; where nobs=1 ; table ANNEE_COL*tcdouble / missing ; run ;

proc freq data = doublecompteall ; where nobs=1 ; table ANNEE_COL*tcdouble / missing ; weight poids_double ; run ;

 

Commentaires / Comments

Pour plus d’informations sur les pondérations et les méthodes d’échantillonnage : https://www.insee.fr/fr/statistiques/fichier/2414232/fiche-ponderation…

 

Variable créée par Benjamin Marteau, 19/09/2018

Nom de variable / Variable name

doublecompte

Description

Cette variable identifie les individus qui sont recensés deux fois au cours d’une même vague annuelle de recensement (EAR). Sont exclus les individus recensés plus de deux fois, ainsi que les doubles « purs » situés dans un même logement.

Fichiers concernés / datafiles used

EDP_B2016_EAR2004_INDIVIDU (EAR2004 à 2016)

EDP_BE2016_EAR2004_LOGEMENT (EAR2004 à 2016)

Valeurs de la variable / Variable values

1 / Individu en double compte

0 / Pas en double compte

Variables utilisées en entrée / Required input variables

ID_DIFF / identifiant individuel

ID_LOG_DIFF / identifiant du logement

ANNEE_COL / année de collecte

Poids_ea / Poids associés à l’enquête

DEPCOM_CODE, CIL, IRIS_ILOT, FIL, ADR_RANG / Adresse

BI_EDP / Individu EDP ou non

Programme SAS OU Stata / Stata-code OR SAS-code

** Espace de travail ;

libname EDP '\\casd.fr\casdfs\Projets\AQRDEDA\Data\EDP_EDP_2016' ;

 

** Concaténation de tous les fichiers individus et logements des EAR de 2004 à 2016 ;

 

** Macro pour importer les bases individus ;

%macro importEAR;

%do i=2004 %to 2016;

data EAR&i ; set EDP.EDP_BE2016_EAR&i._INDIVIDU ;

run;

 %end;

 %mend;

 %importEAR;

 

** Macro pour importer les bases logement ;

%macro importEAR;

%do i=2004 %to 2010;

data EARlog&i ; set EDP.EDP_BE2016_EAR&i._LOGEMENT ;

 %end;

 %mend;

 %importEAR;

 

**## CIL, FIL, DEPCOM_CODE, LOG_RANG ne sont pas disponibles entre 2004 et 2009 ** ;

%macro importEAR;

%do i=2010 %to 2017;

data EARlog&i ; set EDP.EDP_BE2016_EAR&i._LOGEMENT ;

ADR_DIFF=DEPCOM_CODE||CIL||IRIS_ILOT||FIL||ADR_RANG ;

 %end;

 %mend;

 %importEAR;

 

** Macro merge Individu et Logement ;

%macro mergeEARindlog;

%do i=2004 %to 2016;

 proc sort data=EAR&i; by ID_LOG_DIFF ;run;

  proc sort data=EARlog&i; by ID_LOG_DIFF ;run;

  data EAR&i; merge EAR&i EARlog&i;by ID_LOG_DIFF ;run;

 %end;

    %mend;

 

 %mergeEARindlog;

 

** On concatène tous les fichiers ;

data EAR0416 ; set EAR2004 EAR2005 EAR2006 EAR2007 EAR2008 EAR2009 EAR2010 EAR2011 EAR2012 EAR2013 EAR2014 EAR2015 EAR2016 ; run ;

 

***************** Indicateur de bulletins multiples, à poids non nuls ******************** ;

 

data EAR0416 ; set EAR0416 ;

**** On élimine les jeunes en résidence étudiant avec poids 0, en double compte, qui ne sont pas censés être recensés en logement collectif ;

** On garde dans la base les nouveaux-nés à poids nul ;

if CPOP='14' & poids_ea=0 & CATL_X='' then delete ; run ; ** 21883 observations supprimées ;

run ;

 

** Indicateur du nombre de bulletins de recensement par individu ;

proc sort data = EAR0416 ; by ANNEE_COL ID_DIFF ID_LOG_DIFF ;

 

data nmultiple (keep = ID_DIFF nmult ANNEE_COL) ; set EAR0416 ; by ANNEE_COL ID_DIFF ;

retain nmult 0 ; ** Nombre de bulletins multiples ;

if BI_EDP='1' then do ;

if first.ID_DIFF then nmult=0 ;

if ID_DIFF NE = '' then nmult=nmult+1 ;

end ;

ID_DIFF = '' then delete ;

if last.ID_DIFF then output ;

run ;

 

** On fusionne la table des individus de l’EAR 2004-2016 avec l’indicateur du nombre de bulletins multiples ;

proc sort data = EAR0416 ; by ANNEE_COL ID_DIFF ;

proc sort data =  nmultiple ; by ANNEE_COL ID_DIFF ;

data EAR0416 ; merge EAR0416 nmultiple ; by ANNEE_COL ID_DIFF ; run ;

 

 

***************** Individus en double compte ************************ ;

** On ne prend pas les doublons dans le même logement ni les bulletins triples ou plus ;

data EAR0416 ; set EAR0416 ; by ANNEE_COL ID_DIFF ID_LOG_DIFF ;

if BI_EDP='1' then do ;

nobs=0 ;if first.ID_DIFF then do ; nobs=1 ; end ; ** Avoir une variable hiérarchique pour sélectionner un seul individu lorsqu'il est double ;

if first.ID_LOG_DIFF then do ; _doubledecl=0 ; end ;

if (first.ID_DIFF and not last.ID_DIFF) or (not first.ID_DIFF) then do ;

if (first.ID_LOG_DIFF and not last.ID_LOG_DIFF) or (not first.ID_LOG_DIFF) then _doubledecl=1 ; ** Indicateur de doubles bulletins dans le meme logement ;

doubledecl_id=_doubledecl ;

drop _doubledecl ;

end ;

doublecompte=0 ;

if nmult=2 then doublecompte=1 ;

end ;

if doubledecl_id=1 then doublecompte=0 ; ** Les doublons purs sont éliminés ;

run ;

 

** Pour avoir le nombre d’individus en double compte par année de collecte ;

proc freq data = EAR0416 ; where BI_EDP='1' & nobs=1 ; table ANNEE_COL*doublecompte/ missing ; run ;

 

Commentaires / Comments

Pour plus d’informations sur les pondérations et les méthodes d’échantillonnage : https://www.insee.fr/fr/statistiques/fichier/2414232/fiche-ponderation…

Variable created by Adrien Pacifico, 17/12/2017

Description

CSV est un format ouvert permettant d’être utilisé par tous les logiciels de traitement de données (e.g R, Python, Stata). La macro SAS suivante permet d’exporter tout les fichiers d’un dossier en format CSV.


CSV is an open format that can be read by any data software (e.g R, Python, Stata). The following SAS macro allows to export all files in a folder to CSV format.

Fichiers concernés / datafiles used

All Files

Programme SAS OU Stata / Stata-code OR SAS-code

 

Libname EDP "S:\EDP\EDP 2015";

 

%MACRO Convert2CSV(Libname);

    DATA MEMBERS;

    SET SASHELP.VMEMBER(WHERE= (LIBNAME = "&Libname"));

    RETAIN OBS 0;

    OBS = OBS+1;

    KEEP MEMNAME OBS;

    RUN;

    PROC SQL;

    SELECT MIN(OBS) INTO :MIN

    FROM MEMBERS;

    QUIT;

    %LOCAL D;

     %DO D = &MIN %TO &MAX;

      PROC SQL;

      SELECT COMPRESS(MEMNAME) INTO: Table

       FROM MEMBERS

       WHERE OBS=&D;

    QUIT;

    PROC EXPORT DBMS=CSV DATA=&Libname..&Table /* Replace CSV by DTA for stata export */

    /* You need to create P:\mon_dossier */

    OUTFILE="P:\mon_dossier\&Table..CSV";  /* Replace CSV by .dta for stata export */

    RUN;

   %END;

%MEND;

%Convert2CSV(EDP)

 

Commentaire / Any other comment

Vous devez préalablement à l’exécution de cette macro créer le fichier "P:\mon_dossier" (avec l’explorateur windows ou en tappant >>>mkdir P:\mon_dossier dans l’invité de commande windows. )

Lire les commentaires du code pour un export vers du Stata.