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 19/01/2011, 13h47   #1
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Par défaut Insérer des blancs

Bonjour,
Je me casse la tête depuis une bonne heure .
J'ai une colonne X="CHEN CHIEN PING"
et j'aimerais avoir:
X="CHEN CHIEN PING---------------------" ie X $36.
(j'ai mis des tirets à la place des blancs sinon ça ne se verra pas)

Sachant que la longueur de mes chaines de caractère dans ma colonne X est variable.

ps: je sais que ce sujet a été déjà abordé sur le forum mais ça m'a pas aidé.

Merci!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h02   #2
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Salut,

Joue sur la longueur de stockage:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
DATA test;
X="CHEN CHIEN PING" ;
Y=cat(X, "|");
put Y=;
run;
 
DATA test;
length X $36. ;
SET test;
Y=cat(X, "|");
put Y=;
run;
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h04   #3
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
Salut Brice.
Quand veux-tu ces blancs ?
  • dans la table SAS --> fais un LENGTH à $ 36 pour ta variable
  • à l'affichage dans la fenêtre Output --> mets un format $36. à ta variable
  • à l'affichage dans une sortie ODS ? malheureusement la plupart (PDF, RTF, HTML) ne se préoccupent pas des blancs surnuméraires à droite
Si tu es dans le dernier cas, tu peux essayer d'insérer des espaces insécables (^_ où ^ est défini comme caractère d'échappement pour l'ODS), autant qu'il en faudra (tu peux magouiller avec les fonctions LENGTH et REPEAT).

Une petite remarque @ SASADM : pas besoin du point dans un LENGTH. Alors effectivement ça fonctionne, mais ça entretient une confusion entre un format (qui ne sert qu'à l'affichage) et une longueur (qui ne sert qu'en interne à SAS).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 14h18   #4
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Citation:
pas besoin du point dans un LENGTH. Alors effectivement ça fonctionne, mais ça entretient une confusion entre un format (qui ne sert qu'à l'affichage) et une longueur (qui ne sert qu'en interne à SAS)
Je sais mais c'est plus fort que moi. J'ai toujours fait ça.
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h25   #5
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Je rappelle que j'utilise des attrib dans mon étape data comme suit:
Code :
ATTRIB X length=$36  format=$36.  informat=$36.
Je fais comme toi Sasadm
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h46   #6
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
Bonjour,

Un caractère invisible peut être obtenu en tappant ALT 255 (laisser ALT appuyer tapper 255 et relacher ALT). Du coup, tu peux faire une bidouille pour ajouter n caractères invisibles en fonction de la longueur de ta chaine et ton LENGTH.

Code :
1
2
3
4
5
6
7
data test;
	ATTRIB X length=$36  format=$36.  informat=$36.;
	X="CHEN CHIEN PING" ;
	Y=cats(X, repeat('<ALT+255>',vlength(X)-length(X)-1));
	put Y=;
run;
Steel
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 14h48   #7
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par sasadm Voir le message
Salut,

Joue sur la longueur de stockage:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
DATA test;
X="CHEN CHIEN PING" ;
Y=cat(X, "|");
put Y=;
run;
 
DATA test;
length X $36. ;
SET test;
Y=cat(X, "|");
put Y=;
run;
On ne peut pas forcer la longueur de Y à $36 ?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h52   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par steelspirit Voir le message
Bonjour,

Un caractère invisible peut être obtenu en tappant ALT 255 (laisser ALT appuyer tapper 255 et relacher ALT). Du coup, tu peux faire une bidouille pour ajouter n caractères invisibles en fonction de la longueur de ta chaine et ton LENGTH.

Code :
1
2
3
4
5
6
7
data test;
	ATTRIB X length=$36  format=$36.  informat=$36.;
	X="CHEN CHIEN PING" ;
	Y=cats(X, repeat('<ALT+255>',vlength(X)-length(X)-1));
	put Y=;
run;
Steel
Vlength est une fonction SAS? en vaudrait quoi dans cet exemple?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h56   #9
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
Citation:
Envoyé par MEGAMIND2 Voir le message
Vlength est une fonction SAS? en vaudrait quoi dans cet exemple?
Cf SAS DOC
http://support.sas.com/documentation...a000245990.htm

Steel
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 15h04   #10
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
En m'inspirant du code de Steal, j'ai pu compter le nombre de caractères à remplir dans un premier et les remplacés par des @ dans un second temps. Le seul problème est que : une fois que cette table est exportée en txt, je remplace tous les @ par des blancs, je perds tous mes blancs

Code :
1
2
3
4
5
6
7
8
9
DATA TEST;
INPUT LBRAISOC $60.;
L_LBRAISOC=36-length(LBRAISOC)-1;
CARDS;
CHEN CHIEN PING
PRE PILLET JOSIANE MADELEINE
MR DENIS GERMAIN
;
RUN;
Code :
1
2
3
4
5
DATA _NULL_;
SET TEST;
CALL SYMPUT("NB",_N_);
RUN;
%PUT &NB;
Code :
1
2
3
PROC SQL NOPRINT;
SELECT L_LBRAISOC INTO:L_LBRAISOC SEPARATED BY ' ' FROM TEST;
QUIT;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%PUT L_LBRAISOC=&L_LBRAISOC.;
 
%MACRO INSERER_BLANC;
 
%DO i=1 %TO &NB.;
 
	%LET L_LBRAISOC&i=%SCAN(&L_LBRAISOC.,&i.,' ');
	%PUT &&L_LBRAISOC&i;
 
    DATA TEST_&i.;
		SET TEST;
		LBRAISOC_NEW=cats(LBRAISOC, repeat('@',input(&&L_LBRAISOC&i.,best.)));
	  	format _CHARACTER_ $quote250. ;
	  	IF _N_=&i. ;
%END;
		RUN;
 
DATA FINALE; SET %DO i=1 %TO &NB; TEST_&i. %end;; RUN;
 
%MEND INSERER_BLANC;
 
%INSERER_BLANC;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h21.


 
 
 
 
Partenaires

Hébergement Web