如何在 SAS 中使用“输入”导入原始数据

Posted

技术标签:

【中文标题】如何在 SAS 中使用“输入”导入原始数据【英文标题】:How to import a raw data using "input" in SAS 【发布时间】:2022-01-15 09:18:59 【问题描述】:

我想在 SAS 中使用“输入”导入原始数据。我的以下程序效果不佳。我怎么做?请给我一些建议。

data dt00;
infile datalines;
input Year School & $27. Enrolled : comma.;
datalines;
1868 U OF CALIFORNIA BERKELEY 31,612
1906 U OF CALIFORNIA DAVIS 21,838
1965 U OF CALIFORNIA IRVINE 15,874
1919 U OF CALIFORNIA LOS ANGELES 35,730
;
run;

【问题讨论】:

【参考方案1】:

输入语句中的& 修饰符表示要在一行中查找两个或多个分隔符以标记该行中下一个“单词”的结尾。确保数据行实际上有额外的空间。还要确保在 INPUT 语句中的任何信息规范前面包含 : 修饰符。

data dt00;
  input Year School & :$27. Enrolled : comma.;
datalines;
1868 U OF CALIFORNIA BERKELEY    31,612
1906 U OF CALIFORNIA DAVIS   21,838
1965 U OF CALIFORNIA IRVINE   15,874
1919 U OF CALIFORNIA LOS ANGELES   35,730
;

【讨论】:

【参考方案2】:

datalines 默认以空格分隔。您可以在执行时指定特定的行长并进行额外的后处理清理,但最简单的做法是添加不同的分隔符并在您的 infile 语句中包含 dlm 选项。

data dt00;
    infile datalines dlm='|';

    length Year 8. School $27. Enrolled 8.;

    input Year School$ Enrolled : comma.;

    datalines;
    1868|U OF CALIFORNIA BERKELEY|31,612
    1906|U OF CALIFORNIA DAVIS|21,838
    1965|U OF CALIFORNIA IRVINE|15,874
    1919|U OF CALIFORNIA LOS ANGELES|35,730
    ;
run;

输出:

Year    School                       Enrolled
1868    U OF CALIFORNIA BERKELEY     31612
1906    U OF CALIFORNIA DAVIS        21838
1965    U OF CALIFORNIA IRVINE       15874
1919    U OF CALIFORNIA LOS ANGELES  35730

SAS 在input 语句中有 选项,用于读取结构化和非结构化数据,但归根结底,尽可能以分隔格式获取它是最简单的。

【讨论】:

非常感谢,很有用。我明白了!

以上是关于如何在 SAS 中使用“输入”导入原始数据的主要内容,如果未能解决你的问题,请参考以下文章

第二章 导入数据到SAS | 格式规范数据读取

如何编写要在 SAS 中导入的原始数据

如何在PROC SQL中使用MACRO在SAS中创建连续变量

Lesson 1 数据集的建立

在SAS中导入CSV数据时如何设置正确的日期格式?

SAS编程:如何批量读入某路径下外部文档数据?