sas Чтение Иерархических Файлов - PullRequest
0 голосов
/ 31 октября 2019

Я получил эти иерархические файлы

A123456789,A,3    
Y,15FEB1980,M,M,3,FT,55000    
N,3JUN1982,F,M,3,UE,0    
N,24JAN2005,M,S,2,NA,0    
A135790234,B,1    
Y,19OCT1950,F,D,0,PT,5000    
B234523456,A,2    
N,21MAY1975,M,M,2,FT,30000    
Y,30JUN1978,F,M,1,PT,10000    
C345678901,A,0

, и я хочу превратить его в это enter image description here

И я просто пишу свой код следующим образом enter image description here

Но я получил такой результат enter image description here

Как я могу удалить эти 0 в первой строке

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Пожалуйста, добавьте больше деталей о полях. Вот что я могу получить, угадав.

data test;
   infile cards dsd;
   input ID:$11. UNK:$1. subrecords;
   if subrecords eq 0 then output;
   else do i = 1 to subrecords;
      input (f1-f7)(:$10.);
      output;
      end;
   cards;   
A123456789,A,3
Y,15FEB1980,M,M,3,FT,55000
N,3JUN1982,F,M,3,UE,0
N,24JAN2005,M,S,2,NA,0
A135790234,B,1
Y,19OCT1950,F,D,0,PT,5000
B234523456,A,2
N,21MAY1975,M,M,2,FT,30000
Y,30JUN1978,F,M,1,PT,10000
C345678901,A,0
;;;;
   run;
proc print;
   run;

enter image description here

0 голосов
/ 01 ноября 2019

Предполагается, что файл данных является надежным и не содержит дезинформации ...

Требуется одна запись на группу ID, и первая запись в группе указывает количество людей в группе.

  • Введите запись "заголовка" домашнего хозяйства
  • В цикле используйте отдельный оператор INPUT для чтения информации о человеке
  • Используйте результат логической оценки (0,1) длявычислить количество полов и число занятых
  • вычислить среднее значение после цикла
  • использовать неявный вывод для создания одной записи на домохозяйство

data want;
  infile '...\households.dat' dlm=','; 

  attrib
    householdId   length=$10
    householdType length=$1
    memberCount   length=8
    householdHeadFlag length=$1
    dob informat=date9. format=date9.
    sex length=$1    
    maritalStatus length=$1 
    as length=$1
    employmentStatus length=$2
    income length=8        
  ; 

  input householdId householdType memberCount;

  femaleCount = 0;
  maleCount = 0;
  employedCount = 0;
  totalIncome = 0;
  do index = 1 to memberCount;
    input householdHeadFlag dob sex maritalStatus employmentStatus income;

    femaleCount + (sex = 'F');
    maleCount + (sex = 'M');
    employedCount + (employmentStatus in ('FT', 'PT'));
    totalIncome + income;        
  end;

  avgIncome = totalIncome / memberCount;

  keep householdId householdType memberCount femaleCount maleCount employedCount avgIncome;
run;
...