2013-11-27 5 views
0

Я пытаюсь прочитать в файле данных с SAS, который имеет иерархическую структуру, но нет переменной типа записи, которая, как представляется, является требованием для создания нескольких наблюдений на заголовок.чтение иерархических данных в 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

Используя это как тест данных:

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

Этот код должен делать то, что (я думаю) вы хотите:

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) I 'd рекомендуем вызывать переменные вещи, которые имеют какой-то смысл ... не просто "var1" или "var2". 2) Можете ли вы быть уверены, что первый символ на линии всегда будет «M»? Если нет, этот код не будет работать. 3) Вы взяли хорошее руководство по изучению программирования SAS? Многие из этих концепций о чтении в данных должны быть рассмотрены в первой главе или двух.

Удачи вам!

Смежные вопросы