|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juillet 2007 Messages : 49 ![]() |
Bonjour à tous!
Je suis un peu débutant en sas et je bug depuis plusieurs heures sur le même problème. J'ai une table hdrs qui à la forme suivante : Patient Visite Score1 Score2 Score3 .... 0 J0 1 3 2 .... 0 J4 2 10 3 .... 1 J0 6 3 2 ... Il y a théoriquement 8 visites par patients. Certains patients n'ayant pas assisté à une visite n'auront pas la ligne correspondante. J'aimerai pouvoir dans ce cas tout de même leur rajouter une ligne avec le couple Patient/Visite correspondant, et le reste en données manquantes . . . . . . Voila comment j'ai procédé : 1) La macro Voici la macro: Code :
2) La fonction qui l'appelle Code :
Malheureusement, le code m'insère les visites pour tous les patients à toutes les visites sans filtrer celles qui sont déjà dans la table (le if de la macro ne fait pas son effet) Je pense que ca doit être du à un pb de la macro variable &nobserv , mais je ne sais pas pourquoi?? Quelqu'un aurait il une idée?? Merci d'avance pour votre aide! |
||||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Ludovic Le BretonStatisticien/développeur BI Inscription : janvier 2012 Messages : 177 ![]() |
Bonjour,
J'aurais fait plus simple ... 1/ création d'une table de référence de la liste des visites. 2/ création de tous les couples patient/visite possible 3 création de la table finale avec les manquants Code :
|
||
|
|
30
|
|
|
#3 | ||
|
Membre du Club
![]() julien marandetIngénieur Statisticien Inscription : janvier 2013 Messages : 28 ![]() |
Effectivement, la réponse d'edward carnby est plus logique si l'on maîtrise les jointures SQL.
Elle sera aussi plus performante si vous devez prendre en charge de gros volumes de données. Maintenant, pour répondre spécifiquement au problème que vous avez observé et vous fournir une explication sur le fonctionnement de votre macro. En fait, votre code est dans l'ensemble juste. Le seul problème vient de votre PROC SQL où vous comptez le nombre de lignes pour un couple patient/visite donné. Lorsqu'il n'y a aucune observation la PROC SQL n'instancie pas de macro-variable : Votre méthode ne vous permet donc jamais de savoir si le couple patient/visite n'est pas présent dans votre table ! Pour contourner ce problème, soit vous utilisez ma macro-variable système &sqlobs qui est indiquée à chaque PROC SQL, soit vous utilisez les macro-fonctions %symexist() pour vous assurer que votre décompte a été instancié par la PROC SQL. Un exemple qui marche : Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() statisticien Inscription : mai 2011 Messages : 401 ![]() |
Bonjour,
question con et hors sujet, mais c'est au sujet du post précédent Citation:
A première vue ça semble vouloir dire "initialiser" "créer" Citation:
__________________
[...] 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) [...] |
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() julien marandetIngénieur Statisticien Inscription : janvier 2013 Messages : 28 ![]() |
Non votre question n'est pas comme vous la qualifiez...
C'est bien cela, la variable n'est pas créée, elle n'existe pas, tant qu'elle n'est pas instanciée. Comme la PROC SQL est située dans un code macro, la variable &nobserv que vous souhaitiez créer n'existe, ne "vit", que dans l'environnement local de la macro. A la fin de l'exécution de la macro, la variable &nobserv est jetée aux oubliettes, elle n'existe plus, car l'environnement interne de la macro n'a plus lieu d'être. Ainsi, à la seconde exécution de la macro, la PROC SQL va de nouveau instantier la variable &nbserv, si jamais la requête comporte au moins une ligne... Pour savoir si une macro-variable existe (est instanciée), il existe des fonctions dédiées, comme %symexist, %symglobl et %symlocal. Sinon il existe la vue SASHELP.VMACRO qui indique l'ensemble des macro-variables disponibles... |
|
|
00
|
|
|
#6 | ||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 310 ![]() |
Hello,
Personnellement,j'aurai fait : Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com