SAS: la Limitation de variables dans la PROC EXPORT
J'ai un PROC EXPORT question que je me demande si vous pouvez répondre.
J'ai un SAS dataset avec 800+ variables et plus de 200K observations et je suis en train d'exporter un sous-ensemble des variables d'un fichier CSV (c'est à dire j'ai besoin de tous les dossiers; je ne veux pas tous les 800+ variables). Je peux toujours créer un dataset temporaire “GARDER”ing juste les champs dont j'ai besoin et exécuter l'EXPORTATION sur ce temp dataset, mais j'essaie d'éviter l'étape supplémentaire parce que j'ai un grand nombre d'enregistrements.
Pour illustrer cela, considérons un ensemble de données qui a trois variables nommées x, y et z. Mais, je veux le fichier texte généré par PROC EXPORT pour ne contenir que x et y. Ma tentative de solution ci-dessous ne fonctionne pas très bien.
Le Code SAS
Lorsque j'exécute le code suivant, je ne comprends pas exactement ce dont j'ai besoin. Si vous exécutez ce code et de regarder le fichier texte qui a été généré, il a une virgule à la fin de chaque ligne et de l'en-tête inclut toutes les variables dans le jeu de données de toute façon. Aussi, je reçois des messages dans le journal que je ne devrais pas être en train de.
data ds1;
do x = 1 to 100;
y = x * x;
z = x * x * x;
output;
end;
run;
proc export data=ds1(keep=x y)
file='c:\test.csv'
dbms=csv
replace;
quit;
Voici les premières lignes du fichier texte qui a été généré ("C:\test.csv")
x,y,z
1,1,
2,4,
3,9,
4,16,
La SAS Journal
9343 proc export data=ds1(keep=x y)
9344 file='c:\test.csv'
9345 dbms=csv
9346 replace;
9347 quit;
9348 /**********************************************************************
9349 * PRODUCT: SAS
9350 * VERSION: 9.2
9351 * CREATOR: External File Interface
9352 * DATE: 30JUL12
9353 * DESC: Generated SAS Datastep Code
9354 * TEMPLATE SOURCE: (None Specified.)
9355 ***********************************************************************/
9356 data _null_;
9357 %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
9358 %let _EFIREC_ = 0; /* clear export record count macro variable */
9359 file 'c:\test.csv' delimiter=',' DSD DROPOVER lrecl=32767;
9360 if _n_ = 1 then /* write column names or labels */
9361 do;
9362 put
9363 "x"
9364 ','
9365 "y"
9366 ','
9367 "z"
9368 ;
9369 end;
9370 set DS1(keep=x y) end=EFIEOD;
9371 format x best12. ;
9372 format y best12. ;
9373 format z best12. ;
9374 do;
9375 EFIOUT + 1;
9376 put x @;
9377 put y @;
9378 put z ;
9379 ;
9380 end;
9381 if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
9382 if EFIEOD then call symputx('_EFIREC_',EFIOUT);
9383 run;
NOTE: Variable z is uninitialized.
NOTE: The file 'c:\test.csv' is:
Filename=c:\test.csv,
RECFM=V,LRECL=32767,File Size (bytes)=0,
Last Modified=30Jul2012:12:05:02,
Create Time=30Jul2012:12:05:02
NOTE: 101 records were written to the file 'c:\test.csv'.
The minimum record length was 4.
The maximum record length was 10.
NOTE: There were 100 observations read from the data set WORK.DS1.
NOTE: DATA statement used (Total process time):
real time 0.04 seconds
cpu time 0.01 seconds
100 records created in c:\test.csv from DS1.
NOTE: "c:\test.csv" file was successfully created.
NOTE: PROCEDURE EXPORT used (Total process time):
real time 0.12 seconds
cpu time 0.06 seconds
Des idées comment je peux résoudre ce problème? Je suis en cours d'exécution SAS 9.2 sur windows 7.
Toute aide serait appréciée. Merci.
- Karthik
Je ne sais pas si cela fonctionne, je suis donc de poster un commentaire. Vous pouvez utiliser une vue de données pour créer le sous-ensemble de ce que vous voulez, et de les exporter? Je veux dire, vous pouvez exporter une vue de l'esprit? Je ne suis pas sûr...
Qui a travaillé comme un charme! Je vais poster ça comme la solution. Merci.
Juste une note rapide pour dire que le jeu de données d'options ne fonctionnent pas lors de l'exportation de fichiers délimités tels que csv, mais ils font un travail lors de l'exportation vers Excel.
OriginalL'auteur Karthik | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
Basée à Itzy commentaire à ma question, voici la réponse et c'est exactement ce dont j'ai besoin.
Merci pour l'aide!
OriginalL'auteur Karthik