You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含/和,混合分隔符的CSV文件导入及SAS导入报错解决

解决同时用逗号和斜杠作为分隔符的CSV导入SAS问题

我来帮你搞定这个导入报错的问题!你遇到的NOTE: Invalid dat...提示,本质原因是你的CSV文件同时使用逗号(,)和斜杠(/)作为字段分隔符,但你当前的SAS数据步只指定了DLM = ',',这就导致SAS无法正确拆分字段,数据读入时发生错位,原本应该读入某个字段的内容被塞进了其他类型的字段(比如日期字段),自然就会触发无效数据的报错。

下面是具体的解决步骤和优化后的代码:

1. 同时指定多个分隔符

修改infile语句中的DLM参数,把逗号和斜杠都加入进去,这样SAS会将这两个字符都视为字段分隔符:

infile 'R:/Lipeng_Wang/PATSTAT/Publications.csv' DLM = ',/' DSD missover lrecl = 32767 firstobs = 3 ;

这里的DSD选项很关键,它会自动处理被双引号包裹的字段——如果某个字段内容本身包含逗号或斜杠(比如"New York/USA"),DSD会忽略这些内部的分隔符,避免误拆分字段。

2. 优化日期字段的读入格式

你的报错大概率也和publn_date字段有关:如果字段错位,非日期内容被读到这个字段里,或者原始日期是用斜杠分隔的格式(比如10/05/2023),而你用了YYMMDD10.的informat,就会导致日期解析失败。建议改用ANYDTDTE10.这个通用日期格式,它能自动识别多种常见的日期格式(包括斜杠、横杠分隔的):

input 
    pat_publn_id :29. 
    publn_auth :$29. 
    publn_nr :$29. 
    publn_nr_original :$29. 
    publn_kind :$29. 
    appln_id :29. 
    publn_date :ANYDTDTE10.  /* 自动识别多种日期格式 */
    publn_lg :$29. 
    publn_first_grant :29. 
    publn_claims :29. 
;

3. 先测试小样本数据

为了快速验证修改是否有效,建议先导入前几行数据测试,避免直接处理全量大文件浪费时间。只需在infile语句中加入obs=10即可限制读入前10行:

infile 'R:/Lipeng_Wang/PATSTAT/Publications.csv' DLM = ',/' DSD missover lrecl = 32767 firstobs = 3 obs=10 ;

确认测试结果无误后,再去掉obs=10参数处理全量数据。

完整优化后的代码

data SASDATA.Publications ;
    infile 'R:/Lipeng_Wang/PATSTAT/Publications.csv' DLM = ',/' DSD missover lrecl = 32767 firstobs = 3 obs=10 ;
    input 
        pat_publn_id :29. 
        publn_auth :$29. 
        publn_nr :$29. 
        publn_nr_original :$29. 
        publn_kind :$29. 
        appln_id :29. 
        publn_date :ANYDTDTE10. 
        publn_lg :$29. 
        publn_first_grant :29. 
        publn_claims :29. 
    ;
    format publn_date YYMMDDd10. ;
run ;

如果测试后还有报错,可以检查SAS日志里具体是哪个字段出现无效数据,针对性调整该字段的informat(比如如果某个字符字段长度不够,把$29.改成更长的$50.)。

内容的提问来源于stack exchange,提问作者Francis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:45