Précédent   Forum du club des développeurs et IT Pro > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/02/2013, 13h44   #1
pix33
Invité de passage
 
Homme
Chargé d'études statistiques
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chargé d'études statistiques
Secteur : Services de proximité

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : 1
Points : 1
Par défaut Insertion de labels d'une table vers une autre

Bonjour,

Je souhaite automatiser des contrôles sous sas pour un travail de bases de données mais je bute sur un problème. Je vous explique:

1) J'ai une table sas (voir pièce jointe "labels") ou j'ai mes variables et leurs libellés.
2) Dans l'autre table sas (pièce jointe "inclusion"), je retrouve ces mêmes variables avec toutes les données de mon étude, mais je n'ai pas leurs labels.

J'aimerai insérer les libellés (colonne "description" de ma table "LABELS") en tant que labels dans les variables de ma table "inclusion". Et ce, à partir de la 3ème colonne de ma table INCLUSION, les deux premières colonnes étant des identifiants générés automatiquement.

Je n'ai mis qu'un extrait de ma base pour que vous compreniez bien. Je suis obligé de fonctionner à chaque fois avec deux tables comme celles ci car elles sont exportés à partir d'un autre logiciel.

Est-ce possible?

Merci d'avance pour vos réponses.
Images attachées
Type de fichier : png Inclusion.png (46,2 Ko, 9 affichages)
Type de fichier : png Labels.png (13,5 Ko, 9 affichages)
pix33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 14h29   #2
jmarandet
Membre du Club
 
Homme julien marandet
Ingénieur Statisticien
Inscription : janvier 2013
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme julien marandet
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur Statisticien
Secteur : Service public

Informations forums :
Inscription : janvier 2013
Messages : 28
Points : 54
Points : 54
Bonjour pix33,

Quelque chose comme ça ?

Code :
1
2
3
4
5
6
7
8
9
%macro libelle(TABLE,variable,libelle);
	proc sql;
		ALTER TABLE &TABLE. MODIFY &variable. label=&libelle.;
	quit;
%mend;
DATA _null_;
	SET label_inc;
	call execute('%libelle(test.inc,'||sasCode||',"'||Description||'")');
run;
jmarandet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 14h54   #3
pix33
Invité de passage
 
Homme
Chargé d'études statistiques
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chargé d'études statistiques
Secteur : Services de proximité

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : 1
Points : 1
Je viens d'exécuter le code et cela marche très bien.

Il ne me reste plus qu'à le comprendre maintenant, ce qui va être plus dur.

Merci beaucoup en tt cas, cela faisait quelques temps que je cherchais, en vain
pix33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 16h24   #4
jmarandet
Membre du Club
 
Homme julien marandet
Ingénieur Statisticien
Inscription : janvier 2013
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme julien marandet
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur Statisticien
Secteur : Service public

Informations forums :
Inscription : janvier 2013
Messages : 28
Points : 54
Points : 54
Ce code fait appel à trois notions distinctes

1. La PROC SQL
Il s'agit ici de manipuler la structure d'une table en faisant appel au langage SQL
Dans ce cas précis, la manipulation se résume à changer l'attribut "label" d'une colonne. Cela se fait par l'instruction ALTER TABLE

2. Le langage %MACRO
Il permet de généraliser le code compris entre les balises %macro et %mend, en une fonction paramétrable.
Dans le cas précis, j'ai choisi de faire une fonction à 3 paramètres : table, variable, libelle.
On remarque alors que ces paramètres sont utilisés dans la procédure SQL, sous la forme &table., &variable. et &libelle..

3. L'appel à ces fonctions dans une étape DATA.
Ici, il s'agit de lire les données de la table des libellés, et pour chaque ligne récupérée, de demander l'exécution de la macro-fonction %libelle
A chaque ligne de la table, on a de nouvelles valeurs pour SASCODE et DESCRIPTION. Ces valeurs sont passées comme paramètre &variable et &libelle en concaténant les chaines suivantes :
'%libelle(test.inc,' || SasCode || ',"' || Description || '")'

Ce qui donne pour chaque ligne une nouvelle chaine de caractère (on remplace SasCode et Description par de nouvelles valeurs).

La chaine de caractère ainsi obtenue correspond à une fonction, qui est exécutée par la commande CALL EXECUTE

Au final, à chaque ligne de la table, c'est comme si on rédigeait à la suite plusieurs instructions ALTER TABLE ... MODIFY ... LABEL="...";

Est-ce que cela vous éclaire un peu plus ?
jmarandet est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web