от числового значения к временному значению - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу преобразовать числовые данные во временную переменную.У меня есть столбец со значениями, такими как 415, 515, 1487, 1467.Я хочу преобразовать эти значения в формат 04:15, 05:15, 14:87 и так далее. введите описание изображения здесь После этого я хочу извлечь часы и минуты из них в отдельных столбцах, таких как 04 в 1-м столбце и 15 в другом столбце ”

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Преобразование может быть выполнено в одну строку при совместном использовании PUT и INPUT.Чем извлечь часы и минуты.

data have;
  do time_as_encoded_number = 415, 515, 1487, 1467, 1022, 1215, 2345;
    output;
  end;
run;
data want;
  set have;
  format time_as_SAS_time time5.;
  time_as_SAS_time=input(put(time_as_encoded_number,z4.),hhmmss4.);
  hour=HOUR(time_as_SAS_time);
  minute=MINUTE(time_as_SAS_time);
run;
0 голосов
/ 18 апреля 2019

Вы должны показать фактические исходные данные, которые повторяют проблему, включая любые ошибки, которые вы видите.Я предполагаю, что у вас есть числовая переменная с именем sched_dep_time, и вы хотите получить значения часов и минут в две дополнительные числовые переменные.Как предлагает Ричард, вы можете использовать по модулю арифметики , чтобы сделать это:

data want;
  set have;
  * Get the integer number of hours by dividing by 100;
  hours = int(sched_dep_time / 100);
  * Get the number of minutes by getting the remainder after dividing by 100;
  minutes = mod(sched_dep_time, 100);
run;
0 голосов
/ 18 апреля 2019

Z4 в операторе format указывает, как отображается значение, а не как оно обрабатывается как данные. 4. в вызове функции put указывает, как числовое значение преобразуется в символьное представление числа. В SAS, в отличие от языков сценариев, тип переменной является статическим на шаге данных и при сохранении в наборе выходных данных. Наилучшей практикой является концептуально «дать» sched_dep_time роль (или тип) и придерживаться ее, создавая новые переменные для других ролей часа, минуты и времени SAS.

data have;
  input time_as_encoded_number;
datalines;
415
1022
1215
2345
run;

data want;
  set have;
  hour = floor(time_as_encoded_number / 100);
  minute = mod(time_as_encoded_number , 100);
  time_as_SAS_time = DHMS(0,hour,minute,0);
  format time_as_SAS_time time5.;

  * for demonstration only, causes a NOTE, and goes in circle Num->Char->Num;
  length x 8;
  x = put (time_as_encoded_number,4.);

run;

Примечание. Такое утверждение, как демонстрация, «работает» с NOTE:, потому что оно идет кругами. Число преобразуется в символ с помощью put и неявно преобразуется обратно в число из-за левой стороны = правой стороны.

length x 8;
x = put (time_as_encoded_number,4.);
...