将zip中的所有文本文件输入SAS

时间:2017-12-12 10:49:43

标签: sas

我尝试将zip-archive中的所有文本文件读入SAS。 这是我到目前为止所得到的:

filename zipfile zip '/sas_p/gridshared/ch/eg_data/b036081/01_Import/YB_ECPAB/2016wt10vs0_1.zip';

DATA work.YB_ECPAB;
 LENGTH 
    F1 $ 1 KEART 8 KTYP_OR $ 1 KTYP_IAS $ 2 YB_BUKOR 8 KTR_TYP $ 1 KTR 8 RECHNART $ 1 ZIEL_VV $ 2 GEN_KZ $ 1 SCHLBASIS_KZ $ 2 BRCHE 8 BRCHU 8 BRCHE_IAS 8 PRODU 8 PROGR 8 PROKR 8 SPRTE 8 USPRT 8 GESELLSCHAFT 8 KONZERNSERVICE $ 1 KOROR 8 KSTBETR 8 KST 8 REQUESTID_BW $ 1 POLID $ 1 VORGANGSART $ 1 BEWERTUNGSSICHT $ 1 WERTTYP 8 VERSION 8 AENDERUNGSLAUFID $ 1 Satztyp $ 1 RequestID $ 30 JAHRPERIODE 8 PERIODE 8 JAHRVARIANTE $ 2 JAHR 8 WAEHRUNG $ 3 MENGE 8 BETR 8 Menge2 8;
 FORMAT 
    F1 $CHAR1. KEART BEST7. KTYP_OR $CHAR1. KTYP_IAS $CHAR2. YB_BUKOR BEST4. KTR_TYP $CHAR1. KTR BEST5. RECHNART $CHAR1. ZIEL_VV $CHAR2. GEN_KZ $CHAR1. SCHLBASIS_KZ $CHAR2. BRCHE BEST3. BRCHU BEST3. BRCHE_IAS BEST3. PRODU BEST3. PROGR BEST3. PROKR BEST3. SPRTE BEST3. USPRT BEST3. GESELLSCHAFT BEST6. KONZERNSERVICE $CHAR1. KOROR BEST4. KSTBETR BEST10. KST BEST10. REQUESTID_BW $CHAR1. POLID $CHAR1. VORGANGSART $CHAR1. BEWERTUNGSSICHT $CHAR1. WERTTYP BEST2. VERSION BEST2. AENDERUNGSLAUFID $CHAR1. Satztyp $CHAR1. RequestID $CHAR30. JAHRPERIODE BEST7. PERIODE BEST1. JAHRVARIANTE $CHAR2. JAHR BEST4. WAEHRUNG $CHAR3. MENGE BEST10. BETR COMMA32.2 Menge2 BEST10.;

INFILE zipfile(2016wt10vs0_1.txt)
    /*LRECL=188*/
     firstobs=4
     ENCODING="utf-16le"
     TERMSTR=CRLF
     DLM='09'x
     MISSOVER
     DSD;

 INPUT 
     F1 : $CHAR1. KEART : ?? BEST7. KTYP_OR : $CHAR1. KTYP_IAS : $CHAR2. YB_BUKOR : ?? BEST4. KTR_TYP : $CHAR1. KTR : ?? BEST5. RECHNART : $CHAR1. ZIEL_VV : $CHAR2. GEN_KZ : $CHAR1. SCHLBASIS_KZ : $CHAR2. BRCHE : ?? BEST3. BRCHU : ?? BEST3. BRCHE_IAS : ?? BEST3. PRODU : ?? BEST3. PROGR : ?? BEST3. PROKR : ?? BEST3. SPRTE : ?? BEST3. USPRT : ?? BEST3. GESELLSCHAFT : ?? BEST6. KONZERNSERVICE : $CHAR1. KOROR : ?? BEST4. KSTBETR : ?? BEST10. KST : ?? BEST10. REQUESTID_BW : $CHAR1. POLID : $CHAR1. VORGANGSART : $CHAR1. BEWERTUNGSSICHT : $CHAR1. WERTTYP : ?? BEST2. VERSION : ?? BEST2. AENDERUNGSLAUFID : $CHAR1. Satztyp : $CHAR1. RequestID : $CHAR30. JAHRPERIODE : ?? BEST7. PERIODE : ?? BEST1. JAHRVARIANTE : $CHAR2. JAHR : ?? BEST4. WAEHRUNG : $CHAR3. MENGE : BEST10. BETR : ?? COMMA32. Menge2 : BEST10.;
 DROP 
     F1 REQUESTID_BW POLID VORGANGSART BEWERTUNGSSICHT AENDERUNGSLAUFID Satztyp MENGE MENGE2;
RUN;

我的代码执行,但没有记录被读入我的数据集(显示空数据集)。

日志显示:

NOTE: The infile library ZIPFILE is:
      Directory=/sas_p/gridshared/ch/eg_data/b036081/01_Import/YB_ECPAB/2016wt10vs0_1.zip

NOTE: The infile ZIPFILE(2016wt10vs0_1.txt) is:
      Filename=/sas_p/gridshared/ch/eg_data/b036081/01_Import/YB_ECPAB/2016wt10vs0_1.zip,
      Member Name=2016wt10vs0_1.txt

NOTE: Truncation has occurred on the source line.
WARNING: A character that could not be transcoded has been replaced in record 0.
NOTE: A total of 0 records were read from the infile library ZIPFILE.
NOTE: 0 records were read from the infile ZIPFILE(2016wt10vs0_1.txt).
NOTE: The data set WORK.YB_ECPAB has 0 observations and 32 variables.
NOTE: DATA statement used (Total process time):
      real time           0.07 seconds
      cpu time            0.08 seconds

非常感谢有关以下方面的任何帮助:

  1. 需要修理什么?

  2. 是否可以一次读取zip-archive中的所有文件(类似于使用未压缩文件的通配符)?

1 个答案:

答案 0 :(得分:1)

  
      
  1. 需要修理什么?
  2.   

解决方案是使用Notepad ++将我的文本文件转换为utf-8并相应地调整我的SAS代码。

虽然我的代码为ENCODING="utf-16le"TERMSTR=CRLF,但当未压缩时,SAS很好地处理了来自SAP的ucs-2le编码文件。

但是,在压缩文件中,SAS无法识别lineseparator CRLF

帮助我解决这个问题的链接:

File encoded as UCS-2 Little Endian reports 2x too many lines to Java

https://winscp.net/eng/docs/faq_line_breaks

https://superuser.com/questions/294219/what-are-the-differences-between-linux-and-windows-txt-files-unicode-encoding

  
      
  1. 是否可以一次读取zip-archive中的所有文件(类似于使用未压缩文件的通配符)?
  2.   

尚未解决