Q: SAS: получение данных в формате dd.m.yyyy из csv - PullRequest
0 голосов
/ 06 июля 2018

Мне нужно импортировать данные из csv-файла. И я могу читать все остальное, кроме даты. Формат даты похож на формат дд.м.гггг: 6; Тику; 17.1.1967; М; 191;

Я думаю, нужно ли мне указывать информат для его чтения? Я не могу понять, какой из них использовать, потому что ничего из того, что я пробовал, не работает.

Что мне удалось сделать до сих пор:

data [insert name here];
  infile [insert name here];
  dlm=";" missover;
  length Avain 8 Nimi $10 Syntymapaiva 8 Sukupuoli $1 Pituus 8 Paino 5;
  input 
    Avain Nimi $ Syntymapaiva ddmmyyp.(=this doesnt work) Sukupuoli$ Pituus                 
  Paino;
  format  Paino COMMA5.2 ;
  label Syntymapaiva="Syntymäpäivä";
run;

И часть фактического файла для чтения:

 6;Tiku;17.1.1967;M;191;

Спасибо, что помогли этой глупости!

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Нет информации с именем DDMMYYP.. Вместо этого используйте информацию DDMMYY..

Также обязательно используйте модификатор : перед спецификацией informat, включенной в оператор INPUT, чтобы вы все еще использовали ввод в режиме списка вместо форматированного ввода. Если вместо ввода в режиме списка вы используете форматированный ввод, то SAS может читать после разделителя.

input Avain Nimi Syntymapaiva :ddmmyy. Sukupuoli Pituus Paino;

Возможно, вы запутались, потому что существует формат с именем DDMMYYP.

Форматы используются для преобразования значений в текст. Информаторы - это то, что вам нужно использовать, когда вы хотите преобразовать текст в значения.

553  options nofmterr ;
554  data _null_;
555    str='17.1.1967';
556    ddmmyy  = input(str,ddmmyy10.);
557    ddmmyyp = input(str,ddmmyyp10.);
                           ----------
                           485
NOTE 485-185: Informat DDMMYYP was not found or could not be loaded.

558    put str= (dd:) (= yymmdd10.);
559    _error_=0;
560  run;

NOTE: Invalid argument to function INPUT at line 557 column 13.
str=17.1.1967 ddmmyy=1967-01-17 ddmmyyp=.
NOTE: Mathematical operations could not be performed at the following places. The results of the operations have been set to
      missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      1 at 557:13
0 голосов
/ 06 июля 2018

Вы можете использовать anydtdte informat, но (как @Tom указывает ), если известно, что ваши данные фиксированы в этом формате, тогда ddmmyy. будет лучше. Кроме того, совет Тома об использовании модификатора : является правильным и предпочтительным для использования в большинстве (если не во всех) случаях.

data want;
  infile cards dlm=";" missover;
  input Avain Nimi:$10. Syntymapaiva:ddmmyy. Sukupuoli:$1. Pituus Paino;
  format  Paino COMMA5.2 Syntymapaiva date9.;
  label Syntymapaiva="Syntymäpäivä";
datalines4;
6;Tiku;17.1.1967;M;191;
;;;;
run;

, что дает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...