【问题标题】:SAS Export Issue as it is giving additional double quoteSAS 导出问题,因为它提供了额外的双引号
【发布时间】:2020-11-30 18:24:32
【问题描述】:

我正在尝试将 SAS 数据导出为 CSV,此处 sas 数据集名称为 abc,格式为

LINE_NUMBER 个描述
524JG 24 件 AMEFA 复古餐具套装“DUBARRY”

我正在使用以下代码。

filename exprt "C:/abc.csv" encoding="utf-8";

proc export data=abc
outfile=exprt
dbms=tab;
run;

输出是

LINE_NUMBER 个描述
524JG "24 件 AMEFA 复古餐具套装 ""DUBARRY"""

所以这里的描述前后都有双引号可用,额外的双引号出现在 DUBARRY 词之后 & 之前。我不知道发生了什么。谁能帮我解决这个问题,让我明白这里发生了什么。

预期结果:

LINE_NUMBER 个描述
524JG 24 件 AMEFA 复古餐具套装“DUBARRY”

【问题讨论】:

  • 当分隔符或特殊字符嵌入到文本中时,这是 CSV 文件(或分隔文本文件)的标准。您确定要更改吗?
  • 你用什么来阅读不明白为什么会有引号的文件?
  • 是的,我确定。只需要知道怎么做。
  • A (double) quote character in a field must be represented by two (double) quote characters. 这是通过维基百科根据 RFC 4180 标准的规范。

标签: sas


【解决方案1】:

无需使用 PROC EXPORT 来创建分隔文件。您可以使用简单的 DATA 步来编写它。如果你想创建你的示例文件,那么不要在FILE 语句中使用DSD 选项。但请注意,根据您正在编写的数据,您可能会创建一个由于额外的未受保护的分隔符而无法正确解析的文件。此外,您将无法表示缺失值。

让我们制作一个可用于测试的示例数据集。

data have ;
  input id value cvalue $ name $20. ;
cards;
1 123 A Normal
2 345 B Embedded|delimiter
3 678 C Embedded "quotes"
4 .   D Missing value
5 901 . Missing cvalue
;

本质上 PROC EXPORT 正在使用 DSD 选项写入数据。像这样:

data _null_;
  set have ;
  file 'myfile.txt' dsd dlm='09'x ;
  put (_all_) (+0);
run;

这将产生一个像这样的文件(用管道替换选项卡,以便您可以看到它们)。

1|123|A|Normal
2|345|B|"Embedded|delimiter"
3|678|C|"Embedded ""quotes"""
4||D|Missing value
5|901||Missing cvalue

如果您只是删除 DSD 选项,那么您会得到这样的文件。

1|123|A|Normal
2|345|B|Embedded|delimiter
3|678|C|Embedded "quotes"
4|.|D|Missing value
5|901| |Missing cvalue

注意第二行看起来有 5 个值而不是 4 个,因此无法知道如何将其拆分为 4 个值。另请注意缺失值的最小长度如何至少为一个字符。

另一种方法是运行数据步骤,将 PROC EXPORT 生成的普通文件转换为您想要的变体格式。如果您的目标格式需要特殊字符,这也可以让您添加转义字符以保护特殊字符。

data _null_;
  infile normal dsd dlm='|' truncover ;
  file abnormal dlm='|';
  do i=1 to 4 ;
    if i>1 then put '|' @;
    input field :$32767. @;
    field = tranwrd(field,'\','\\');
    field = tranwrd(field,'|','\|');
    len = lengthn(field);
    put field $varying32767. len @;
  end;
  put;
run;

您甚至可以使这个数据步变得足够聪明,以计算第一行的字段数,并使用它来控制循环,这样您就不必对其进行硬编码。

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 2010-12-15
    • 2014-11-28
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多