SAS :Ограничение переменных в PROC EXPORT

У меня есть вопрос PROC EXPORT, на который мне интересно, можете ли вы ответить.

У меня есть набор данных SAS с более чем 800 переменными и более 200 тыс. наблюдений, и я пытаюсь экспортировать подмножество переменных в файл CSV (, т. е. мне нужны все записи; Мне просто не нужны все 800+ переменных ). Я всегда могу создать временный набор данных «СОХРАНИТЬ» только те поля, которые мне нужны, и запустить ЭКСПОРТ для этого временного набора данных, но я пытаюсь избежать дополнительного шага, потому что у меня большое количество записей.

Чтобы продемонстрировать это, рассмотрим набор данных с тремя переменными с именами x, y и z. Но я хочу, чтобы текстовый файл, созданный с помощью PROC EXPORT, содержал только x и y. Моя попытка решения ниже не совсем работает.

Кодекс САС

Когда я запускаю следующий код, я не получаю именно то, что мне нужно. Если вы запустите этот код и посмотрите на сгенерированный текстовый файл, в нем есть запятая в конце каждой строки, а заголовок в любом случае включает все переменные в наборе данных. Кроме того, я получаю некоторые сообщения в журнале, которые я не должен получать.

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;

Вот первые несколько строк сгенерированного текстового файла ("C :\test.csv")

x,y,z
1,1,
2,4,
3,9,
4,16,

Журнал SAS

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

Любые идеи, как я могу решить эту проблему? Я использую SAS 9.2 на Windows 7.

Любая помощь будет оценена по достоинству. Спасибо.

  • Картик
5
задан Karthik 30 July 2012 в 18:33
поделиться