Bonjour à tous,
Je suis nouveau sur ce forum, je me suis inscrit pour vous poser une question car j'ai eu un problème sur le code SAS et je n'ai pas trouvé les solutions.
J’ai une base comme au dessus.
J’ai essayé au début sur RStudio de faire une boucle pour le nombre de renouvellement.
Quand c’est une même personne (même nom) et quand elle renouvelle le contrat dans le mois, donc c’est +1 contrat pour l’année qu’elle l'a renouvelé (par ex: ligne 1: nb2011=1 et nb2012=nb2013=nb2014=0; lignes 2: nb2012=1 et nb2011=nb2013=nb2014=0). Quand cette personne ne renouvelle plus et ça passe à une autre personne, nb2011=nb2012=nb2013=nb2014=0 (par ex: ligne 3). Et ça a bien marché. Voici mon code R:
Par contre sur R ça a mis beaucoup de temps pour tourner car la "vraie" base est énorme. J'ai donc essayé de faire sur SAS. Mai ça m'a mis toujours 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 for ( i in 1:13-1){ if (nom[i]==nom[i+1]) { if(as.numeric(data_effet[i+1]-date_fin[i])<30) { if(annee_fin[i]=="2011"){nb2011[i]=1} else if(annee_fin[i]=="2012"){nb2012[i]=1} else if(annee_fin[i]=="2013"){nb2013[i]=1} else if(annee_fin[i]=="2014"){nb2014[i]=1} } } }. J'ai aussi fait avec une macro à part mais ça marche pas non plus. Le code SAS comme suit:
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 do i=1 to 13-1; h=i+1; if nom&i.=nom&h. then do; if datdif(date_fin&i.,date_effet&h., 'act/act')<30 then do; if annee_fin&i.=2011 then nb2011=1; if annee_fin&i.=2012 then nb2012=1; if annee_fin&i.=2013 then nb2013=1; if annee_fin&i.=2014 then nb2014=1; end; end; end; run;
Merci à tous.
Partager