Nano Hash - криптовалюты, майнинг, программирование

intck() дает отрицательное значение

Я новичок в SAS, и мне трудно найти разницу между двумя датами. У меня есть 2 столбца: checkin_date и checkout_date даты указаны в mmddyy10. формат (мм/дд/гггг).

Я использовал следующий код:

stay_days= intck('day', checkin_day, checkout_day);

Я получаю правильные значения для дат в том же месяце, но неправильные значения для дней, которые проходят через 2 месяца. Например, разница между 06.02.2014 и 11.02.2014 составляет 5. Но разница между 31.01.2014 и 13.02.2014 составляет -18, что неверно.

Я также просто попытался вычесть их обоих:

stay_day = checkout_day - checkin_day;

Я получаю тот же результат для этого тоже.

Весь мой код:

    data hotel;
infile "XXXX\Hotel.dat";
input room_no num_guests checkin_month checkin_day checkin_year checkout_month checkout_day checkout_year internet_used $ days_used room_type $16. room_rate;
checkin_date = mdy(checkin_month,checkin_day,checkin_year);
informat checkin_date mmddyy.;
format checkin_date mmddyy10.;
checkout_date = mdy(checkout_month,checkout_day,checkout_year);
informat checkout_date mmddyy.;
format checkout_date mmddyy10.;
stay_day= intck('day', checkin_day, checkout_day);
15.09.2019

  • Как вы могли получить -18 вместо -13 при сравнении 31 января и 13 февраля? 15.09.2019
  • Вероятно, это вычитание 31 из 13. 15.09.2019
  • Вы что-то делаете неправильно - скорее всего, ссылаетесь на неправильные переменные в своем коде. Опубликуйте полный код, но он должен работать нормально. Ваши даты должны быть числовыми переменными с примененным форматом даты. Переменная datetime также не будет работать. 16.09.2019
  • я загрузил код 17.09.2019

Ответы:


1

Ваша проблема - опечатка - использование неправильных переменных в функции intck(). Вы используете переменные «xxx_DAY», которые представляют собой ДЕНЬ месяца, а не полную ДАТУ. Изменить на stay_day= intck('day', checkin_date, checkout_date);

17.09.2019

2

Ваши данные, вероятно, имеют значения даты в неправильных переменных. При использовании вычитания порядок должен быть ENDDATE - STARTDATE. При использовании функции INTNX() порядок должен быть от STARTDATE до ENDDATE. В любом случае, если значение в переменной STARTDATE стоит ПОСЛЕ значения в переменной ENDDATE, тогда разница будет отрицательным числом.

Возможно, вам нужно очистить данные?

Единственный способ получить -18, сравнивая 2014-01-31 и 2014-02-13, — это извлечь день месяца и вычесть их.

diff3 = day(end) - day(start);

что было бы то же самое, что вычесть 31 из 13.

Пример использования ваших дат:

data check;
  input start end ;
  informat start end mmddyy.;
  format start end yymmdd10.;
  diff1=intck('day',start,end);
  diff2=end-start;
cards;
02/06/2014 02/11/2014
1/31/2014  2/13/2014 
;

Полученные результаты:

Obs         start           end    diff1    diff2

 1     2014-02-06    2014-02-11       5        5
 2     2014-01-31    2014-02-13      13       13
15.09.2019
  • Спасибо за объяснение. функция intck(), вероятно, вычитает начало из конца. то есть конец-начало. Кроме того, используя ту же функцию, я получаю правильные результаты для дат, находящихся в одном месяце. Я не получаю правильных результатов для дат в разные месяцы. Вероятно, он вычитает день, но не учитывает месяц. Я объединил переменные года, месяца и дня, используя функцию mdy(). может из-за этого ошибка? 15.09.2019
  • Чтобы работать с датами, вам нужно иметь даты. Ваш вопрос показал, что у вас есть даты, но этот комментарий создает впечатление, что вместо этого у вас есть отдельные переменные года, месяца и дня. Вы можете использовать функцию MDY(), чтобы преобразовать их в фактическое значение даты. Тогда у вас будут значения даты, которые вы можете сравнить. 15.09.2019
  • У меня были отдельные переменные для месяца, дня и года. Я использовал mdy(), чтобы получить даты проверки и регистрации и сохранить их в отдельных столбцах. Я передал эти 2 столбца в качестве аргументов функции intck. Я все еще сталкиваюсь с той же проблемой. 15.09.2019
  • Обновите вопрос, указав пример кода, который вы фактически запустили. 16.09.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..