Mam pytanie PROC EXPORT, zastanawiam się, czy możesz odpowiedzieć.SAS: Ograniczanie zmiennych w PROC EXPORT
Mam zestaw danych SAS z ponad 800 zmiennych i ponad 200K obserwacji i próbuję wyeksportować podzestaw zmiennych do pliku CSV (tj. Potrzebuję wszystkich rekordów, po prostu nie chcę wszystkich 800 + zmiennych) . Zawsze mogę utworzyć tymczasowy zestaw danych "KEEP", używając tylko tych pól, których potrzebuję, i uruchom EKSPORT na tym pliku danych tymczasowych, ale próbuję uniknąć dodatkowego kroku, ponieważ mam dużą liczbę rekordów.
Aby to wykazać, należy rozważyć zestaw danych zawierający trzy zmienne o nazwach x, yiz. Ale chcę, aby plik tekstowy wygenerowany przez PROC EXPORT zawierał tylko xiy. Moja próba rozwiązania poniżej nie działa.
Kodeks SAS
Kiedy uruchomić poniższy kod, nie dostać dokładnie to, czego potrzebuję. Jeśli uruchomisz ten kod i spojrzysz na plik tekstowy, który został wygenerowany, na końcu każdej linii ma przecinek, a mimo to nagłówek zawiera wszystkie zmienne w zbiorze danych. Ponadto dostaję trochę komunikatów do dziennika, których nie powinienem otrzymywać.
Oto kilka pierwszych linii pliku tekstowego, który został wygenerowany ("C: \ test.csv")
x,y,z
1,1,
2,4,
3,9,
4,16,
SAS Log
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
Any pomysły, jak mogę rozwiązać ten problem? Używam SAS 9.2 w Windows 7.
Każda pomoc będzie doceniona. Dzięki.
- Karthik
Zdaję sobie sprawę, że mogę użyć "danych _null_; ustawić ds1; plik" c: \ test.csv "dlm =", "; umieścić x y; uruchomić;" aby to zadziałało. Eksport PROC wydaje się atrakcyjny, ponieważ może być konieczne wyeksportowanie do skoroszytu programu Excel jutro zamiast pliku CSV, a opcja "krok danych" nie będzie wtedy działała. – Karthik
Nie wiem, czy to działa, więc zamieszczam to jako komentarz. Czy możesz po prostu użyć widoku danych do utworzenia podzestawu, który chcesz, a następnie wyeksportować? Mam na myśli, czy możesz wyeksportować widok? Nie jestem pewien ... – itzy
To działało jak czar! Powiem to jako rozwiązanie. Dzięki. – Karthik