我正在尝试使用具有分层结构的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;
有人能指出我正确的方向吗?
答案 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编程的好指南?关于数据读取的很多这类概念应该在第一章或第二章中介绍。
祝你好运!