在SAS中读取分层数据

时间:2013-11-27 17:34:38

标签: sas hierarchical-data raw-data

我正在尝试使用具有分层结构的SAS读取数据文件,但是没有记录类型变量,这似乎是每个标题创建多个观察值的必要条件。

数据看起来像这样:

Monkey & Horse Dance HORSE1 DDD4226 0001
3232233321221121.........
3222233333321332.........
Monkey & Horse Dance HORSE2 DDD5210 0001
1222121212221222.........
Monkey & Horse Dance HORSE3 DDD5405 0001
1111123211111211.........
1111111111111111.........

所需的输出将是这样的:

Monkey & Horse Dance HORSE1 DDD4226 0001 3 2 3 2 2 3 3 3 2 1 2 2 1 1 2 1
Monkey & Horse Dance HORSE1 DDD4226 0001 3 2 2 2 2 3 3 3 3 3 3 2 1 3 3 2
Monkey & Horse Dance HORSE2 DDD5210 0001 1 2 2 2 1 2 1 2 1 2 2 2 1 2 2 2
Monkey & Horse Dance HORSE3 DDD5405 0001 1 1 1 1 1 2 3 2 1 1 1 1 1 2 1 1

我一直在尝试这样的事情:

data monkey;
    infile monkey;
    informat var7-var22 1;
    retain var1 var2 var3 var4 var6 var7;
    input define 1 @;
    if define='M' then input @1 var1 $14. var2 $char5. var3 $char5. var4 7. +0 var6;
    if define=('1' or '2' or '3' or '4' or '5') then input var7-var22;
run;

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

将其用作测试数据:

Monkey & Horse Dance HORSE1 DDD4226 0001
123456789012345
123456789012345
Monkey & Horse Dance HORSE2 DDD5210 0001
123456789012345
Monkey & Horse Dance HORSE3 DDD5405 0001
123456789012345
123456789012345

这段代码应该做你想要的(我认为):

data monkey;
    infile "C:\monkey.txt" lrecl=40 truncover;

    length    var1 $14
            var2 $5
            var3 $6
            var4 $7
            var5 $4
            var6-var20 3;

    retain var1-var5;

    input @1 testchar $1. @;

    if testchar="M" then do;
        input    @1 var1 $14.
                @16 var2 $5.
                @22 var3 $6.
                @29 var4 $7.
                @38 var5 $4.;
    end;
    else do;
        input @1 var6 1. var7 1. var8 1. var9 1. var10 1. var11 1. var12 1. var13 1. var14 1. var15 1. var16 1. var17 1. var18 1. var19 1. var20 1.;
        output;
    end;
run;

我还会向你推荐一些东西,但是:1)我建议你调用你的变量那些有某种含义的东西......不仅仅是“var1”或“var2”。 2)你能确定一行中的第一个字符总是“M”吗?如果没有,此代码将不起作用。 3)你有没有学过SAS编程的好指南?关于数据读取的很多这类概念应该在第一章或第二章中介绍。

祝你好运!