Bonjour à tous,
Je cherche à réaliser une proc corr avec une graaaaaande liste de variables (environ 23 000).
Cette liste de variables est disponible dans une table "tmp" issue d'un proc contents et j'aimerais placer cette liste dans ma proc corr.
Etant donné le nombre de variables ainsi que le nom de chacune d'elles (en moyenne, une variable a 18 caractères), je suis obligée de décomposer ma liste de variables en plusieurs macrovariables pour ne pas dépasser la limite autorisée...
Le problème est que je souhaiterai créer ma variable varlist = &varlist1 &varlist2 ... &varlistN de sorte qu'une fois cette varlist créée, je puisse l'utiliser dans ma proc corr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 proc contents data=test4 out=tmp noprint; run; /*Ajout de double quotes pour construire une liste pour la suite*/ data tmp; set tmp; NAME2=cats("""",NAME,""""); run; %let vide=; %macro test(); /*Comptage du nombre de lignes dans ma table tmp*/ proc sql; select count(*) into : vide from tmp; quit; %let i=1; /*varlist : Macrovariable finale*/ %let varlist=""; /*Chargement des variables*/ %do %while (&vide>=1); proc sql noprint; %let varlist&i=; select distinct name2 into : varlist&i separated by " " from tmp where monotonic()<=3250; delete * from tmp where name in (&&varlist&i); select count(*) into : vide from tmp; quit; *%put varlist&i= &&varlist&i; %let varlist&i=%sysfunc(compress(&&varlist&i,%str(%"))); /*ICI LE COEUR DU PROBLEME*/ /*Création de la liste pour la proc corr*/ %if (&i=1) %then %let varlist='varlist1'; %else %let varlist = &varlist /'&varlist'&i; *%put VARLIST : &varlist; %let i=%eval(&i+1); %end; %let varlist=%qsysfunc(tranwrd(&varlist, %str(%/'),%str(% ) )); /*Remplacement des /' par un espace*/ %let varlist=%qsysfunc(tranwrd(&varlist, %str(%' ),"")); /*Remplacement des quotes seuls par une chaine vide*/ %put varlist : &varlist; /*FIN PROBLEME*/ /*Lancement de la proc corr*/ /*proc corr data=Test4; var &varlist; run;*/ %mend; %test();
Cependant, tout ce que j'ai testé ne fonctionne pas ou me fait dépasser la taille autorisée par les macrovariables.
J'espère avoir été claire.
Merci d'avance pour l'aide que vous pourrez m'apporter.
Partager