Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 10h07   #1
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Par défaut Changer la taille d'une variable

Bonjour,

J'ai besoin de changer la taille d'une variable qui existe déjà dans une table.

Je sais comment fixer la taille d'une variable quand on la crée mais dans mon cas la variable existe déjà et j'ai des observations dans la table.

Merci
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h13   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
tu veux dire quoi par changer la taille d'une variable dans une table? merci de preciser ta question si tu veux que la reponse le soit egalement.

Manoutz
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h14   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
hello,
quand tu dis taille, tu parles de l'informat? du lenght??
tout sa tu peux le faire avec la proc data set et , statement ( modify).
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h27   #4
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Je suppose que tu veux modifier le LENGTH de ta variable.
L'astuce consiste à l'indiquer à SAS dans une étape DATA avant l'instruction SET (c'est à dire avant que SAS ne découvre les caractéristiques des variables telles qu'elles sont actuellement. Car une fois le SET passé, on ne modifie plus les longueurs).
Code :
1
2
3
4
DATA work.test ;
  LENGTH name $ 3 ;
  SET sashelp.class ;
RUN ;
@ SAM : on peut bien modifier les formats et informats dans PROC DATASETS MODIFY mais pas les longueurs.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/06/2011, 10h34   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
DATA tab;
SET sashelp.class;
run;
 
DATA tab;
SET sashelp.class;
attrib age
format= 20.
length=4.
label=" age de l'élève"
informat= 6.5
;
run;
 
 
 
proc sql;
DESCRIBE TABLE sashelp.class;
%put *******************;
DESCRIBE TABLE tab;
quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h36   #6
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
En fait mon problème est que je concaténe 3 variables numériques et je crée une variable numérique à partir de la variable char que j'obtiens (mon but est d'avoir une variable numérique).

Ce qui me dérange est qu'un arrondi est fait en faisant ces manipulations.

Je ne sais pas si vous avez des idées pour corriger ce que je fais.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h39   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
il faut imbriquer les put input. si t'es en V9 , t'as la focntion catt;
Code :
1
2
3
4
5
6
7
 
DATA test;
a=1;
b=2;
c=3;
d=catt(a,b,c,d);
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h43   #8
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Je usis un débutant donc dsl pour les questions idiotes...

Je ne suis pas sûr mais SAS me dit que le length pour une variable numérique est entre 3 et 8.

Vrai???
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h46   #9
Membre expérimenté
 
Inscription : avril 2009
Messages : 537
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 537
Points : 540
Points : 540
Salut,

Tu fais quelque chose comme ca?

(il vaudrait mieux que tu postes ton code)

Code :
1
2
3
4
5
6
7
8
9
DATA _NULL_;
   length _1 _2 _3 _n 8 _c $ 10;
   _1 = 10;
   _2 = 4;
   _3 = 4;
   _c = cat(_1, _2, '.', _3);
   _n = input(_c, 8.);
   put _n = _c =;
run;
je te conseille plutot:
Code :
1
2
3
 
   _n2 = _1 * 10 + _2 + (_3 / 10);
   put _n2 =;
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h46   #10
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
regardes ce poste

Et oui le length d'une variable numérique SAS sous Windows est entre 3 et 8
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h47   #11
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Une remarque je ne fais pas la concaténation de 3 variable masi 2 variable et une partie d'une 3ème.

Donc j'utilise substr() pour avoir prélever ce qui m'intéresse de la variable.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h53   #12
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Je poste la partie du code qui me pose le problème. J'ai fait une grosse macro.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
DATA table2;
SET table1
id=compress(var1||substr(var2,2,2)||var3);
run;
 
DATA table3;
SET tabl2;
IF id="" then ident.;
else ident=id;
DROP id;
run;
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h57   #13
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
et tu veux faire quoi?

Code :
IF id="" then ident/*.*/; envèle le point
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h59   #14
Membre expérimenté
 
Inscription : avril 2009
Messages : 537
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 537
Points : 540
Points : 540
Pour transformer un caratere en numérique c'est la fonction input qu'il faut utiliser.
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h02   #15
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Dsl mais j'ai fait une erreur de frappe

c'est

Code :
1
2
 
IF id="" then ident=.;
C'est le seul moyen que j'ai trouvé pour crée une variable numérique.

Je vais essayer input. J'espère qu'il n'y aura pas d'arrondi

Merci
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h03   #16
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Je reviens sur mon premier exemple : j'ai transformé les variables : a;b et c en caractères. et je crée une variable numérique (d).
Après je ne sais pas trop ce que tu veux faire
Code :
1
2
3
4
5
6
7
 
 
DATA test;
a='1';
b='2';
c='3.220125';
d=catt(a,b,substr(c,1,3))*1; run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h09   #17
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Citation:
Envoyé par s_a_m Voir le message
Je reviens sur mon premier exemple : j'ai transformé les variables : a;b et c en caractères. et je crée une variable numérique (d).
Après je ne sais pas trop ce que tu veux faire
Code :
1
2
3
4
5
6
7
 
 
DATA test;
a='1';
b='2';
c='3.220125';
d=catt(a,b,substr(c,1,3))*1; run;
J'ai essayé ta méthode mais le problème est tjs là, j'obtiens toujours un arrondi, ce qui ne me convient pas.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h15   #18
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
pas pour moi.
Est ce que tu peux donner un exemple de valeurs des variables :

var1
var2
var3

et le résultat attendu (id)?
et puis est ce que var1,var2,var3) sont de type munérique ou caractère?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/06/2011, 11h25   #19
Invité de passage
 
Homme
Étudiant
Inscription : juin 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 18
Points : 3
Points : 3
Mon collègue m'a aidé et la solution est de changer le format de la variable.

Il fallait mettre BEST16. pour ne pas avoir l'arondi.

Merci beaucoup à tous.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h39   #20
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
l'informat et non pas le format.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h31.


 
 
 
 
Partenaires

Hébergement Web