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 21/06/2011, 18h10   #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 Taille maximale liste SQL en SAS

Bonjour,

J'ai besoin de créer une liste SQL très longue en utilisant SAS.

SAS me donne comme "erreur" the length of the value "la liste" exceeds the maximum length. The value has been truncated to 65534.

J'ai besoin d'augmenter la capacité de stockage mais je ne sais pas comment.

Quelqu'un peut m'aider?

Merci d'avance
Jefbrel
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h19   #2
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
On peut voir ton code?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h23   #3
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 MEGAMIND2 Voir le message
On peut voir ton code?
Je travaille sur un autre pc mais je vais mettre le code qui pose problème dans la macro.
Code :
1
2
3
4
 
proc sql noprint;
SELECT DISTINCT variable INTO:liste departed BY ' ' FROM la_table;
quit;
Le seul problème est que je récupère beaucoup trop d'obserations de la table.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h29   #4
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
La finalité c'est d'en faire quoi? je dis ça parce que tu peux stocker en colonne via une data _null_ , dans ce cas tu n'as pas de limite de taille
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h34   #5
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 MEGAMIND2 Voir le message
La finalité c'est d'en faire quoi? je dis ça parce que tu peux stocker en colonne via une data _null_ , dans ce cas tu n'as pas de limite de taille
J'ai crée une macro qui contient plusieurs étapes. Cette variable est comme un identifiant donc j'utilise cette liste pour la parcourir et lancer plusieurs étapes pour chaque identifent avec %do
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h41   #6
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
Cette macro pourrait répondre à ton problème, au lieu de faire un scan de ta liste, il suffit d'appeler chaque élément de ta liste par &&var&i.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%MACRO _M(TABLE=);
 
	DATA CLASS;
	SET &TABLE.;
	CALL SYMPUT("NB",_N_);
	CALL SYMPUT(CATS("VAR",_N_),NAME);
	RUN;
 
	%DO k_=1 %TO &NB;
		%PUT &&VAR&k_.;
	%END;
 
%MEND;
 
%_M(TABLE=SASHELP.CLASS);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h53   #7
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 n'ai pas très bien compris le code. Je ne suis pas très à l'aise avec CALL SYMPUT. Je lancerai le code pour essayer de mieux comprendre.

Mais je ne sais pas si j'ai été très clair, ce qui m'intéresse ce ne sont pas les valeurs distinctes d'une variable en particulier.
Jefbrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 19h06   #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
Pour avoir chaque élément de ta liste, tu dois scanner la liste
Alors qu'avec le call symput, tu n'as pas besoin de scanner.
Dans cet exemple, var1=TOTO, var2=TITI, var2=TUTU
J'ai fait un put pour que comprennes, pour ça il faut voir la log.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
DATA TEST;
INPUT NAME$;
CARDS;
TOTO
TITI
TUTU
;
RUN;
 
 
%MACRO _M(TABLE=);
 
	DATA CLASS;
	SET &TABLE.;
	CALL SYMPUT("NB",_N_);
	CALL SYMPUT(CATS("VAR",_N_),NAME);
	RUN;
 
	%DO k_=1 %TO &NB;
		%PUT var&k_=&&VAR&k_.;
	%END;
 
%MEND;
 
%_M(TABLE=TEST);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h58.


 
 
 
 
Partenaires

Hébergement Web