背景简介

SAS系统在数据处理方面有着丰富的功能和灵活性。本篇博客将深入探讨如何在SAS中阅读和创建原始数据文件,特别是当数据文件中的字符值超过默认长度限制,以及当数据由非空白字符分隔时如何正确处理这些数据。

字符值截断与指定长度

在处理原始数据时,我们经常会遇到字符值长度超过默认8个字符的限制。SAS在读取这些数据时会自动截断超出部分。为了解决这个问题,我们可以使用 LENGTH 语句在读入之前指定字符变量的长度。例如,如果 City 字段中最长的城市名是 PHILADELPHIA ,则可以设置 City 的长度为12,确保所有城市名称都能完整读取。

data sasuser.growth;
    infile citydata;
    length City $ 12;
    input City $ Pop70 Pop80;
run;

使用非空白分隔符

SAS允许通过 INFILE 语句中的 DLM= 选项来指定非空白分隔符,这对于处理由逗号或其他非空格字符分隔的数据文件非常有用。例如,如果数据文件使用逗号作为分隔符,可以在 INFILE 语句中使用 dlm=',' 来正确地读取数据。

data sasuser.creditsurvey;
    infile cccomma dlm=','; 
    input Gender $ Age Bankcard FreqBank Deptcard FreqDept;
run;

处理含有分隔符的字段值

当字段值中包含分隔符时,可以使用 DSD 选项来处理。 DSD 选项允许SAS正确地识别字段,并去除值周围的引号,使得字段即使包含分隔符也能被正确读取。

data work.finance2;
    filename find 'c:\\data\\findat2';
    infile find dsd;
    length SSN $ 11 Name $ 9;
    input ssn name Salary : comma. Date : date9.;
run;

处理记录末尾的缺失值

在使用列表输入时, MISSOVER 选项可以用来处理记录末尾的缺失值。这个选项会防止SAS读取下一条记录,当当前行没有为所有 INPUT 语句变量找到值时。

data sasuser.creditsurvey;
    infile creditcr missover;
    input Gender $ Age Bankcard FreqBank Deptcard FreqDept;
run;

处理记录开头或中间的缺失值

对于记录开头或中间的缺失值, DSD 选项提供了有效的解决方案。 DSD 会将两个连续的分隔符解释为一个缺失值,从而正确读取含有缺失值的数据。

data sasuser.creditsurvey;
    infile credit2 dsd;
    input Gender $ Age Bankcard FreqBank Deptcard FreqDept;
run;

总结与启发

通过本章的学习,我们了解了SAS在数据输入输出方面的一些高级技巧。掌握如何指定字符变量长度、使用自定义分隔符以及处理缺失值,可以大大提升数据处理的效率和准确性。这些技能对于处理复杂的数据集尤其重要,能够帮助分析师更好地准备数据以进行进一步的分析和建模。

  • 当处理超出默认长度的字符数据时,务必使用 LENGTH 语句。
  • 使用 DLM= DSD 选项可以有效处理非空白分隔符和字段内的分隔符。
  • MISSOVER 选项对于处理记录末尾的缺失值非常有用,但要注意它不适用于记录开头或中间的缺失值。

建议进一步探索SAS的数据处理能力,尝试将这些技术应用于不同的数据集,以便更加深入地理解它们的使用场景和效果。同时,也可以学习SAS的其他数据处理工具和功能,如正则表达式处理、数据透视和合并等。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐