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

时间:2018-04-08 12:19:01

标签: input sas invalid-characters

我在从管道分隔的txt文件中读取数据时遇到问题。对于address_1“'S example”,有3条记录具有这些值。所有这些记录后面都是一些空白字段。 address_1最终成为“S example |||”由于某种原因,SAS吃“'”然后最终忽略了管道分隔符。有谁知道如何正确读取以单引号开头的值?

这是我用于阅读文件

的内容
 data test;
attrib
        ID     length= $16
        ADDRESS_1        length= $50
        ADDRESS_2        length= $50
        ADDRESS_3        length= $50
        EMAIL_ADDRESS    length= $60;
      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 $40;
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;

1 个答案:

答案 0 :(得分:0)

显示您的数据行。

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

"'S example,"

'''S example,'

DSD语句中的INFILE选项可识别相邻分隔符,表示缺少值,也会从引用值周围删除引号。

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

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

您还可以尝试预处理_INFILE_变量,将单个单引号转换为"'"。这是一个简单的例子。

data test2 ;
  length var1-var5 $50 ;
  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
;;;;