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

SAS导入字段含逗号的CSV文件:如何正确读取Movie电影数据集

问题根源

你使用的CSV文件本身不符合标准规范:包含逗号的Name字段没有用双引号包裹,导致SAS默认的逗号分隔逻辑会把Name内部的逗号识别为字段分隔符,出现字段错位。

修正方案

由于你的CSV中,除了Name字段外,其余字段的位置和格式都是固定的:前两个字段为ID、Underage,最后三个字段为Rating、Year、Rank on IMDb,我们可以先把整行内容读入,再按规则拆分字段,就能完美规避Name含逗号的问题,代码如下:

FILENAME XX '你的Movie.csv实际存储路径';

data movieYY;
    infile XX firstobs=2 truncover;
    /* 先把整行内容读入一个长字符串变量 */
    length whole_line $200 ID $5 Underage $3 Name $100 Rating 8 Year 8 'Rank on IMDb'n 8;
    input whole_line $char200.;

    /* 第一步:从右往左拆分最后3个固定字段 */
    /* 找最后第一个逗号,拆分出IMDb排名 */
    pos_rank = findc(whole_line, ',', 'B');
    'Rank on IMDb'n = input(strip(substr(whole_line, pos_rank+1)), best.);
    whole_line = substr(whole_line, 1, pos_rank-1);

    /* 找倒数第二个逗号,拆分出年份 */
    pos_year = findc(whole_line, ',', 'B');
    Year = input(strip(substr(whole_line, pos_year+1)), best.);
    whole_line = substr(whole_line, 1, pos_year-1);

    /* 找倒数第三个逗号,拆分出评分 */
    pos_rating = findc(whole_line, ',', 'B');
    Rating = input(strip(substr(whole_line, pos_rating+1)), best.);
    whole_line = substr(whole_line, 1, pos_rating-1);

    /* 第二步:从左往右拆分前两个固定字段 */
    /* 找第一个逗号,拆分出ID */
    pos_id = findc(whole_line, ',');
    ID = strip(substr(whole_line, 1, pos_id-1));
    whole_line = substr(whole_line, pos_id+1);

    /* 找第二个逗号,拆分出Underage */
    pos_underage = findc(whole_line, ',');
    Underage = strip(substr(whole_line, 1, pos_underage-1));
    /* 剩下的内容全部是Name,不管含多少逗号都正确 */
    Name = strip(substr(whole_line, pos_underage+1));

    /* 删除过程变量 */
    drop whole_line pos_:;
run;

原代码问题说明

你之前写的代码只判断了第一个逗号后的内容是否为数字,逻辑覆盖不全:如果Name字段中包含多个逗号,还是会出现错位问题,而从两端拆分固定字段的逻辑可以兼容所有Name含逗号的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:18:03