|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : octobre 2012 Messages : 30 ![]() |
Bonjour à tous !
Je vous explique mon petit problème. J'ai plusieurs data set représentant des historiques stockés dans le même répertoire et nommé de la même manière "hist_...". Ceux ci sont construits de la façon suivante : variable | moisannee | typgeo | lblgeo |codegeo | cle | var1 | var2 |....| varN ex : total | 112012 | dep | Landes | 40 | dep_40_112012 | var1 |...| VarN total | 112012 | ape | Mours | 003 | ape_003_112012 | var1 |...| VarN total | 122012 | dep | Landes | 40 | dep_40_122012 | var1 |...| VarN total | 122012 | ape | Mours | 003 | ape_003_212012 | var1 |...| VarN Dans ces tables historiques j'ai des zones que je dois regrouper entre elles, et ainsi obtenir la sum chaque mois des variables var1, var2,...varN Dans l'exemple précédent, si je souhaite ajouter l'ape Mours au dep Landes, je souhaite obtenir la ligne suivante (seul le libellé doit changé) total | 112012 | dep | Landes + ape Mours| 40 | dep_40_112012 | var1 |...| VarN Ma question : comment parvenir à ce résultat en automatisant sur l'ensemble de mes dataset historique. De mon coté, je ferai au préalable une étape data pour recoder les lignes que je souhaite fusionner en associant à l'ape de Mours les memes typegeo, codegeo et cle que le dep Landes, et en changeant le libgeo de Mours et des Landes par "Landes + ape Mours". Puis je fais une proc sql avec un group by pour sommer. Mais cela ne me semble pas optimisé comme solution. Merci d'avance |
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 214 ![]() |
Bonjour,
Je te conseillerais de trouver la variable qui va te permettre d'apparier les observations. La variable codegeo conviendrait-elle ? Si oui alors tu crées un format de regroupement de zone, par exemple : format $fregroup : '40' ==> '01' '003' ==> '01' etc ... Tu peux aussi créer un format pour libeller les nouvelles zones: format $flzone : '40' ==> 'Landes + ape Mours' etc ... Et surtout tu crées un informat des zones géo "maitre" qui vont donner leurs codes aux regroupements; informat fzonemaitre: '40' ==> 1 etc ... OTHER==> 0 Maintenant tu n'as plus qu'à faire un groupe by sur les valeurs formatées par fregroup pour faire les sommes et à ne conserver que les observations maître grâce a un having, ce qui te permet de conserver les bonnes valeurs sur les variables quali typgeo, codegeo et cle : Code :
|
||
|
|
00
|
|
|
#3 | |
|
Membre à l'essai
![]() Inscription : octobre 2012 Messages : 30 ![]() |
Bonjour et merci pour votre réponse.
Effectivement l'utilisation des formats semble être une bonne solution. Citation:
Pour la proc sql, au lieu de faire une succession de sommes (sum(var1), sum(var2)), n'y a t'il pas une autre manière de procéder sachant que j'ai une centaine de variables ? Merci encore. |
|
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 214 ![]() |
Si tes variables s'appellent vraiment var1--var100 tu peux utiliser le code macro.
Si leur nom ne suit pas de règles tu peux aussi de débrouiller avec le code macro mais ça donne en général des choses horribles. Je te conseille plutôt de faire une proc contents avec récupération du nom des variables dans une table output, puis de produire le code des SUM par une étape data avec affichage du code dans la log. Tu recuperes ce code et tu le colles dans la proc sql. Code :
|
||
|
|
00
|
|
|
#5 | |
|
Membre à l'essai
![]() Inscription : octobre 2012 Messages : 30 ![]() |
Merci sasadm !
Tout fonctionne ou presque... Citation:
Merci encore |
|
|
|
00
|
|
|
#6 | ||
|
Membre à l'essai
![]() Inscription : octobre 2012 Messages : 30 ![]() |
j'ai modifié le programme pour pouvoir le faire sur n'importe quelle table "historique", celles-ci n'ayant pas forcement les mêmes variables :
Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 214 ![]() |
je pense que les inscrire en tant que zone maitre dans le format fzonemaitre suffirait (et dans $flzone mais en reprenant leur libellé d'origine).
|
|
|
00
|
|
|
#8 | |
|
Membre à l'essai
![]() Inscription : octobre 2012 Messages : 30 ![]() |
Citation:
Je pense que je vais garder la table finale qui ne va contenir que les zones regroupées, puis fusionner cette table avec la table d'origine en supprimant les zones qui ont été groupées. Je ne vois pas d'autre solution. Merci quand même. |
|
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() statisticien Inscription : mai 2011 Messages : 401 ![]() |
Bonjour,
pour automatiser tes formats peut être devrait tu t'informer sur l'option CNTLIN de la proc format, de sorte de décrire tes formats dans une table plutot que dans le code. Bon courage.
__________________
[...] Le SASSAGE s'il existe, a pour but de purifier les différentes semoules pour une meilleur efficacité de la mouture (par aspiration et tamisage) [...] |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com