读入以单引号开头的数据 SAS

Reading in data starting with a single quotation mark SAS

我在从竖线分隔的 txt 文件中读取数据时遇到问题。 address_1 “'S example,". All of these records are followed by a few blank fields. address_1 ends up being "S example |||" for some reason SAS eats the "'” 有 3 个具有这些值的记录,然后最终忽略竖线分隔符。有谁知道如何正确读取以单引号开头的值?

这是我用来读取文件的

 data test;
attrib
        ID     length= 
        ADDRESS_1        length= 
        ADDRESS_2        length= 
        ADDRESS_3        length= 
        EMAIL_ADDRESS    length= ;
      INFILE "&directory./Data/Example_Data.txt"
        dlm="|"   RECFM=v lrecl=32767 dsd firstobs=2 missover end=eof;


    input 
        ID     $
        ADDRESS_1        : $CHAR50.
        ADDRESS_2        : $CHAR50.
        ADDRESS_3        : $CHAR50.
        EMAIL_ADDRESS    $
;
run;

这里有一些示例数据,只需复制并粘贴到记事本中

ID|Address_1|Address_2|Address_3|Email
1234|'S Road,|||email@GMAIL.COM
2534|'S Road,|||email2@GMAIL.COM

烦人的是,当我用示例数据尝试这个时,它起作用了,但是当我使用我的实际数据时,' 消失了,字段被连接成 1。

这是 SAS EG 生成的代码,它可以很好地读取我的原始数据文件

data example;
Length 
     Address_1 ;
Format 
    ADDRESS_1        $CHAR40.;
Informat 
        ADDRESS_1        $CHAR40.;

infile "test_data.txt"
        LRECL=226
        ENCODING="LATIN1"
        TERMSTR=CRLF
        DLM='7F'x
        MISSOVER
        DSD ;

Input
        ADDRESS_1        : $CHAR40.;
run;

显示你的数据线。

包含定界符或引号的值应该用引号引起来。因此,如果 address_1 的值是 'S example, 那么在分隔文件中它应该表示为

"'S example,"

'''S example,'

INFILE 语句中的 DSD 选项将相邻的定界符识别为指示缺失值,也会从引用值周围删除引号。

您可能遇到了与 SAS Communities 上的这份报告中类似的错误。 https://communities.sas.com/t5/Base-SAS-Programming/Importing-delimited-file-with-text-qualifiers/m-p/449215#M113034

在这种情况下,可以使用 scan() 函数和 m 修饰符而不是 q 修饰符从数据行解析值。

您也可以尝试 pre-processing _INFILE_ 变量将裸单引号转换为 "'"。这是一个简单的例子。

data test2 ;
  length var1-var5  ;
  infile cards dsd dlm='|' truncover firstobs=2;
  input @;
  _infile_=tranwrd(cats('|',_infile_,'|'),"|'|","|""'""|");
  _infile_=substrn(_infile_,2,length(_infile_)-2);
  input var1-var5 ;
cards4;
ID|Address_1|Address_2|Address_3|Email
2534|'S Road,||'|email2@GMAIL.COM
;;;;