Вариант вместо назначения - PullRequest
0 голосов
/ 16 ноября 2018

Я должен написать программу, которая читает данные после строк данных;в части кода.Как вы видите, я использую назначение для удаления '', $ и ** в предоставленных данных.Однако я должен сделать программу без назначения, что довольно хлопотно.Любые идеи о том, как его изменить, поэтому программа читает код, но игнорирует '', $ и **?

Приветствия

data PERSONELL;
input @; 
  if not index(_infile_,'****');
  _infile_ = translate(_infile_,' ','$');
  length ID $ 4;
  length DEPT $ 1;
  input ID $ @1 DEPT $ BIRTHDAY date10. +(-5) YEAR :8. Salary comma8./;
  datalines;
A123  4Mar1989  8,6,00
***************
    A037 23Jun1957  21,450
**************
 M015 19Sep1977$17,500
***********
;
run;

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы можете предположить, что каждое значение присутствует (то есть пропущенные значения представлены точкой), тогда используйте параметр dlm= в операторе infile, чтобы SAS рассматривал $ и * так же, какпробелы.

data PERSONELL;
  length id $4 dept $1 birthday 8 year 8 salary 8;
  infile datalines dlm=' $*';
  informat birthday date. salary comma.;
  input id birthday salary ;
  year=year(birthday);
  dept=id;
  format birthday date9.;
datalines;
A123  4Mar1989  8,6,00
***************
    A037 23Jun1957  21,450
**************
 M015 19Sep1977$17,500
***********
;

Результаты

Obs     id     dept     birthday    year    salary

 1     A123     A      04MAR1989    1989      8600
 2     A037     A      23JUN1957    1957     21450
 3     M015     M      19SEP1977    1977     17500
...