Sas изменить формат даты

Обновлено: 05.07.2024

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

3 ответа

Как получить sas формат даты YYYYMM в SAS ? Из этого кода ниже я бы получил '2011-11-01' call symput('me','||put(intnx('month',today(),-1 ),yymmdd10.)||'); Я пытаюсь получить что-то вроде: '2011-11' Спасибо

Я нашел несколько вопросов, касающихся SAS даты на этом форуме, но я не смог найти ответ на этот вопрос. Я думаю, что это довольно просто, но я не могу понять это правильно. У меня есть набор данных с датой (DD-MM-YYYY), которая по какой-то причине имеет символьный формат. Я бы хотел, чтобы он был.

Синтаксис параметров набора данных представляет собой одно заключенное в скобки выражение. Опция rename вписывается в:

Синтаксис параметра RENAME выглядит следующим образом:

Таким образом, правильное утверждение set будет

Поскольку вы утверждаете, что вы новичок, я добавил этот раздел.

Код, который вы показываете, указывает на ввод переменных с первоначальными именами date_diagnostic и date_examen . Если эти переменные действительно являются символьными переменными для начала, то входные данные необходимо преобразовать из символа в дату SAS (которая является просто числом со специальным значением). Если, однако, переменные уже были датой SAS с форматом, отличным от того, который вы хотите, вам нужно только обновить формат переменных (или использовать оператор FORMAT, чтобы изменить формат для использования на шаге PROC)

Вы не можете переименовать даты, а затем использовать эти переменные в операторе INPUT. Они были переименованы и больше не существуют, поэтому попытка доступа к date_dia в функции INPUT в худшем случае приведет к отсутствию всех значений.

Итак, изменения: 1. Измените имя набора выходных данных в инструкции data. 2. Удалите параметры набора данных RENAME. 3. Добавьте оператор DROP, чтобы удалить ненужные переменные.

Я импортировал набор данных в SAS с помощью Proc import. Теперь проблема в том, что я не могу изменить формат даты в этом наборе данных. В данных дата находится в YYYYMMDD для даты продажи, я хотел бы изменить это как 02Dec2005. Пожалуйста, ознакомьтесь с приведенными ниже данными. Пожалуйста.

Мне нужно добавить текущую дату к выходным данным, которые я экспортирую из SAS в следующем формате: filename_YYYYMMDDhhmmss.csv Я создаю макропеременную следующим образом: %let date_human = %sysfunc(today(), YYYYMMDDn8.); Кто-нибудь знает, как создать пользовательский формат для даты, которую я.

Я считаю, что проблема заключается в заявлении RENAME . Вы можете вызвать его только один раз.

Похожие вопросы:

Привет, действительно основной вопрос относительно SAS. Мой набор данных имеет формат даты yyyymmdd, а тип-числовой. Я хочу преобразовать столбец так, чтобы даты были dd/mm/yyyy. Возможно, это очень.

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

У меня возникла проблема при загрузке SAS дат в Teradata. Формат даты в SAS был '01Jan2017', и после загрузки дат в teradata будет отображаться строка чисел типа 23050, но не в формате даты. И я.

Как получить sas формат даты YYYYMM в SAS ? Из этого кода ниже я бы получил '2011-11-01' call symput('me','||put(intnx('month',today(),-1 ),yymmdd10.)||'); Я пытаюсь получить что-то вроде: '2011-11'.

Я нашел несколько вопросов, касающихся SAS даты на этом форуме, но я не смог найти ответ на этот вопрос. Я думаю, что это довольно просто, но я не могу понять это правильно. У меня есть набор данных.

Я импортировал набор данных в SAS с помощью Proc import. Теперь проблема в том, что я не могу изменить формат даты в этом наборе данных. В данных дата находится в YYYYMMDD для даты продажи, я хотел.

Мне нужно добавить текущую дату к выходным данным, которые я экспортирую из SAS в следующем формате: filename_YYYYMMDDhhmmss.csv Я создаю макропеременную следующим образом: %let date_human =.

Я извлекаю данные из многих таблиц Teradata, которые имеют даты, хранящиеся в формате MM/DD/YYYY (например: 8/21/2003 , 10/7/2013 ). SAS возвращает их как DDMMMYYYY или формат DATE9 (например.

Я знаю, что могу изменить формат отображения переменной даты в SAS, используя что-то вроде следующего: data junk0; x = date(); format x yymmddd10.; run; Может ли кто-нибудь показать мне, как.

У меня свидание переменной в ddmmyy8 . такой формат, как 24/12/12, я хочу изменить его на ddmmyy10 . формат, однако, она автоматически меняется на 24/12/2012, который не является правильным, то дата.

У меня есть три столбца с датой, отформатированной по-разному в SAS:

  1. 12 june 2017 00:15 -полная дата
  2. 2016 -только год
  3. 12 -только месяц

Мне нужно изменить формат даты и вычесть после дат, чтобы получить результаты по количеству месяцев.

например, "12 June 2017 00:15" - December 2016 = 7

как это сделать?

3 ответа

Как вы преобразовать переменную ммддгг переменной дата9? Например, предположим, что мы имеем следующее: x = 05/10/2011 Я хочу, чтобы x имел форму 10May2011. Поэтому я сделал следующее: xnew = put(x, date11.); Но по какой-то причине возникает ошибка (date11 не является распознанным форматом).

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

Как вы, вероятно, уже обнаружили, не существует готовой информации о дате SAS , которая будет правильно обрабатывать ваше полное поле даты, поэтому вам нужно будет написать немного пользовательской логики, чтобы преобразовать его перед выполнением расчета. date9. -это самый близкий подходящий формат, который я смог найти:

Предполагая, что у вас есть три числовые переменные и первая из них содержит допустимые значения SAS datetime , вы должны сначала преобразовать обе в допустимые значения даты SAS. Затем вы можете использовать функцию INTCK() для подсчета месяцев.

  1. Преобразуйте поле "full date" в значение даты SAS.
  2. Также преобразуйте комбинацию года и месяца в значение даты SAS.
  3. Используйте функцию INTCK, чтобы найти разницу в месяцах.

даты данных ;
вход dt $18. гг мм ;
mm_diff = intck ("mon", input (cats (yy, mm), yymmn6.), input (dt, anydtdte12.)) ; положить mm_diff= ;
карты ;
12 июня 2017 00:15 2016
12 11 июня 2018 00:15 2017 3
;
запустить ;

Журнал будет напечатан:

В качестве примечания, утверждение "нет готовой информации о дате SAS, которая будет правильно обрабатывать ваше полное поле даты", сделанное в другом месте этой темы, неверно. Как видно из приведенного выше фрагмента программы, ANYDTDTEw. informat справляется с этим с апломбом. Это просто обязанность программиста предоставить достаточную ширину информации. Выше он выбран как W=12. Если вы не хотите угадывать и/или считать, просто используйте ANYDTDTE32.

С уважением, Пол Дорфман

Похожие вопросы:

У меня есть странная ситуация, когда у меня есть даты в качестве символов, например 06/May/2014. Я конвертирую их в даты SAS следующим образом: data ae; set ae; format aestdt date10.;.

У меня есть набор данных SAS, где один из столбцов с именем ISSUE_DATE является текстовым типом и имеет значения даты в формате 'YYYYMMDD' . Я пишу запрос к этому набору данных и хотел бы получить.

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

Как вы преобразовать переменную ммддгг переменной дата9? Например, предположим, что мы имеем следующее: x = 05/10/2011 Я хочу, чтобы x имел форму 10May2011. Поэтому я сделал следующее: xnew = put(x.

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

Я знаю, как изменить формат переменных с помощью следующего шага данных. data want; set have; format abc date9.; run; Но если изменение формата требует преобразования из символьного в числовое, то.

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

Я читал в файле sas7bdat, используя пакет haven . В одном столбце есть даты в формате YYQ6. I R это преобразуется в числа типа -5844, 0, 7121, .. Как я могу преобразовать это в формат года? У меня.

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

В предыдущей статье мы изучили, как читать внешние необработанные данные. А сегодня познакомимся с оператором SET, который считывает стандартные наборы данных SAS (SAS Data Set), научимся создавать срезы данных, настраивать постоянные атрибуты, а также изучим несколько полезных функций SAS. Я снова постараюсь изложить материал максимально простым языком, используя как можно больше примеров.



Допустим данные хранятся в формате EXCEL в директории C:\workshop\habrahabr. Импортируем электронную таблицу, создадим из нее срез, создадим новые вычисляемые столбцы, используя функции SAS, а затем разобьем данный набор данных на два.

Импорт электронной таблицы и задание фильтра


Файл excel хранится в указанной выше директории и имеет следующий вид:


Применим процедуру PROC IMPORT для преобразование электронной таблицы в набор данных SAS:


Опция validvarname=V7 задает «правильные» с точки зрения SAS имена полей: все недопустимые символы заменяет знаками нижнего подчеркивания. О правилах именования переменных можно прочитать в Уроке 1.

Зададим фильтр сразу при чтении внешнего файла, например, выберем только те наблюдения, в которых дата окончания работ не пропущена. Обратите внимание, на синтаксис параметра where.


Рассмотрим детально операторы шага PROC IMPORT:

Datafile – определяет полный путь и имя внешнего файла
Dbms — определяет тип данных для импорта.
Out – идентифицирует выходной набор данных SAS с одно- или двухуровневым именем SAS (имя библиотеки и имя набора данных).
Replace – перезаписывает существующий набор данных SAS.
Getnames – Указывает, генерирует ли PROC IMPORT имена переменных SAS из значений данных в первой строке во входном внешнем файле.

Запустим шаг PROC IMPORT и изучим LOG:


Распечатаем полученный набор данных SAS:


Вывод процедуры PROC PRINT показан ниже:


Также в SAS UE вы можете воспользоваться вкладкой «Результаты» и ознакомиться с импортированным набором данных SAS.


Чтение наборов данных SAS


Чтение набора данных SAS реализуется на шаге DATA с помощью оператора SET:

Рассмотрим общий синтаксис оператора SET:


Если вы не указываете в операторе SET набор данных, то он читает наблюдения из последнего созданного набора данных SAS.

В операторе SET можно указать несколько наборов данных, в этом случае SAS Data Sets допишутся один под другой (аналог UNION в SQL).

Также на шаге DATA может быть два оператора SET, в этом случае таблицы объединяются по общему столбцу. Подробнее о двух операторах SET можно прочитать, например, в этой статье.

Простейший код, создающий копию набора данных SAS, выглядит следующим образом:

Настройка дескриптора набора данных SAS

Изучить дескриптор набора данных SAS можно с помощью процедуры PROC CONTENTS (см. Урок 2). В данном уроке, мы распечатаем компоненту дескриптора с помощью процедуры PROC DATASETS:


Зададим постоянный формат для переменных Travel_Expenses и Budget:


Проверим атрибуты наборы данных SAS:


Создание вычисляемых столбцов

Кроме того, если нет подходящей функции для выполнения той или иной задачи, можно воспользоваться процедурой PROC FCMP и создать свою функцию.

В рамках данного урока мы изучим три функции YRDIF, SUM и CATS.

Для подсчета разницы в датах в годах мы будем использовать функцию YRDIF.

Напомню, что дата в формате SAS представляет собой количество дней, начиная с 01 января 1960 года (см. Урок 1). На представленных данных, нам необходимо вычислить время выполнения работ:


Обратите внимание, что с помощью формата 3.1 для переменной Lead_Time, мы округлили вычисленные значения в отчете (!) до 1 знака после запятой. Оператор формат не меняет значения в наборе данных SAS!


Далее вычислим стоимость работ без командировочных расходов:


В рамках нашей задачи стоимость работ без учета командировочных расходов мы вычислили без использования функции. В нашей таблице нет пропущенных значений, если бы одна из переменных (Budget или Travel_Expenses) имела бы пропущенное значение, результатом был «миссинг».

Создадим тестовый набор данных:


Вычислим разницу переменных Budget Travel_Expenses


Результат выполнения данного шага:


Для того, чтобы получить корректный результат, можно использовать функцию SUM.

Данная функция относится к категории функций описательной статистики. Функции описательной статистики игнорируют пропущенные значения.

Написание кода через SUM:


В этом случае результат выполнения шага выглядит следующим образом:


Для объединения текстовых значений в одну строку можно использовать функцию CATS.


Изучим дескриптор созданного набора данных:


Для того, чтобы задать длину переменной Email явно, необходимо использовать оператор LENGTH:


Создадим детализированный столбец на основании переменной Lead_Time, учитывая следующие условия:

  1. Если значение переменной Lead_Time менее 1, то столбец Detail имеет значение less than 1 year.
  2. Если значение переменной Lead_Time в диапазоне от 1 до 2, включая границы, то столбец Detail имеет значение 1-2 years.
  3. Если значение переменной Lead_Time в диапазоне от 2 до 3, исключая 2, то столбец Detail имеет значение 2-3 years.
  4. Если значение переменной Lead_Time в диапазоне от 3 до 4, исключая 3, то столбец Detail имеет значение 3-4 years.
  5. Если значение переменной Lead_Time в диапазоне от 4 до 5, исключая 4, то столбец Detail имеет значение 4-5 years.
  6. Во всех остальных случаях столбец Detail имеет значение above 5 years.
  1. IF-THEN-ELSE
  2. ELSE IF
  3. SELECT-WHEN


Добавим условие, которое выбирает только те наблюдения, в которых значение переменной Detail не равно ‘above 5 years’. При использовании where в качестве фильтра будет возникать синтаксическая ошибка:


Оператор where не используется для вычисляемых столбцов. Для отбора нужных нам переменных необходим выборочный оператор IF. Он отменяет вывод наблюдения в создаваемый набор данных:


Обратите также внимание, что выборочный оператор IF требует арифметический оператор. Мы не можем написать, например, так:


В Log выведется ошибка:


Настраиваем набор данных SAS.

В новом наборе данных SAS не должны присутствовать переменные Manager_FirstName и Manager_LastName. Данное требование реализуется с помощью параметра DROP, так же можно использовать оператор DROP.

Разбиваем созданный набор данных SAS на два по заданному условию

На одном шаге DATA можно создать несколько наборов данных SAS. Создадим для каждой страны отдельный набор данных.

Чтобы проверить, какие значения есть в столбце Country, можно, например, использовать процедуру PROC FREQ.


Данный шаг считает, сколько раз то или иное значение из переменной Country встречается в указанном в параметре data= наборе данных SAS.

Результат выполнения данного шага будет следующим:


Итак, создадим два набора данных на одном шаге DATA, используя оператор OUTPUT и условную обработку:


Запустим код и посмотрим LOG:


Это кратко о чтении наборов данных SAS и их настройке. В следующей статье мы познакомимся с Вами с объединением наборов данных с помощью операторов MERGE и SET.

А в качестве P.S. напомню структуру наших уроков по SAS BASE:

Статьи, которые уже опубликованы:


Буду рада обратной связи в комментариях! Какие еще темы Вы хотели бы увидеть в статьях?

Ввод и вывод переменных SAS и структуры решений и операторов цикла

Форматы ввода и вывода переменных SAS

ввод, вывод
Основной формат ввода и вывода SAS очень прост:
Ввод: переменная INPUT 1, формат ввода 1, переменная 2, формат ввода 2 . ;
Вывод: FORMAT Формат ввода переменной 1 1 Формат ввода переменной 2 2 . ;
* Между ними должны быть пробелы

Формат ввода очень прост, но формат ввода для разных типов переменных отличается
Указание формата ввода изменит значение переменной, но указание формата вывода не изменит значение переменной, просто изменит их внешний вид.

Формат ввода числовых переменных

Формат ввода числовых переменных в основном W.D
W: указывает общее количество цифр или ширину значения, включая десятичную точку, десятичная точка занимает 1 цифру
D: указывает количество цифр в десятичной части значения
Например, 8.2, что означает, что общее количество цифр составляет 8, 3 десятичных знака (то есть формат 00.000)
Например, 4. означает, что общее количество цифр равно 4 без десятичных знаков.
Точка должна быть добавлена ​​независимо от того, есть ли десятичная дробь

Формат вывода числовых переменных

Существует три основных формата вывода числовых переменных:
① W.D: значение соответствует формату ввода
② commaW.D: разделяйте целую часть значения справа налево запятой через каждые три цифры
③centW.D: отображение данных в виде знака процента, оно автоматически умножит переменную на 100 и добавит%

* Запятая и проценты должны сопровождаться W.D, без пробелов

image_1d0k1pl7r1nnfv4s1dmbbs2a1613.jpg-55.8kB

Ввод кода:

image_1d0k1lqn610ftmht15vouug10stm.jpg-5.7kB

Выходной результат:

Формат ввода символьной переменной

image_1d0k2hpn2b1s1e131f9l1vbdbah2n.jpg-26.4kB

Ввод кода:

image_1d0k2ilpgve81iquvrc102rb1834.jpg-7.3kB

Выходной результат:

Формат ввода переменной даты

image_1d0k2n7a7fri1d501d516qd1um73h.jpg-225.3kB

Существует много форматов ввода для переменных даты. В следующей таблице перечислены наиболее часто используемые форматы ввода даты.
где W - ширина и не может превышать 32, конкретное количество зависит от ширины введенных данных

Выходной формат переменных даты

Формат вывода переменной даты в основном совпадает с форматом ввода, но формат вывода может добавлять букву перед шириной, чтобы различать различные формы отображения.

image_1d0k2ulgbcr51q0d1617ikp3cq3u.jpg-43.1kB

image_1d0k2vml410m1ni817anvqhj454b.jpg-28.6kB

Ввод кода:

image_1d0k30f0d185r13vmivbjo31mhc4o.jpg-3.5kB

Выходной результат:

Два специальных символа ввода

1. Роль толстой кишки (:)
В SAS пространство используется как метка деления переменной по умолчанию. Если длина содержимого переменной отличается, вы можетеДобавьте двоеточие между переменной и форматом вводаРешать
Роль двоеточия заключается в том, чтобы сообщить SAS, что если вы хотите прочитать следующую переменную, вам необходимо выполнить любое из следующих условий: либо обнаружен пробел, либо прочитана ширина переменной.

image_1d0k3aqo2jn21plute51e10h4k55.jpg-25.7kB

Ввод кода:

image_1d0k3bib41h8c6ba7e21n2pkmr5i.jpg-9.2kB

Выходной результат:

2. Роль амперсанда (&)
Если само значение переменной содержит пробелы, вам нужно использовать & для завершения

image_1d0k3iivchp6b614b619541fjn6i.jpg-46.7kB

Ввод кода:

image_1d0k3jb6o1kja18nc1gqb168cg726v.jpg-9.4kB

Выходной результат:

Пользовательские форматы ввода и вывода

image_1d0k3rap21p4t1aja1emut5j14607c.jpg-43.1kB

Пользовательский формат в SAS принятPROC FORMATПроцесс для достижения
Основная форма:
PROC FORMAT;
INVALUE <значение переменной формата имени или диапазон значений входное значение формата переменной или входной формат диапазона значений;> имя переменной формата значения или диапазон значений 1 = выходной формат 1 значение или значение переменной Диапазон 2 = выходной формат 2 ……;
имя шаблона PICTURE <диапазон значений>;

image_1d0k3taip7fk19041o321ad8mip7p.jpg-73.8kB

Ввод кода:

image_1d0k3upa2b5lft11bv9ncv1p5m96.jpg-19.4kB

Выходной результат:

Структура решений SAS

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

Базовый формат структуры решения:
ЕСЛИ выражение ТОГДА новая переменная =;
ELSE новая переменная =;

image_1d0k470mk13jq8albvtmr2sva3.jpg-42kB

Ввод кода:

image_1d0k4800q1rnigeif36c2u1381ag.jpg-10.9kB

Выходной результат:

Оператор цикла SAS

Базовый формат оператора цикла:
DO переменная = от начального значения до конечного значения;
оператор SAS;
END;

Петля пример 1

Найти последовательность Фибоначчи A = 20

image_1d0k4di5k1f0s1pfpo9c21c1r0hat.jpg-16.8kB

Ввод кода:

image_1d0k4f4f51n4i1til16d214r0viba.jpg-15.8kB

Выходной результат:

Петля пример 2

Рассчитать 1 + 2 + . + 20 =?

image_1d0k4jqqmj8p9nb41g7ql1e7qbn.jpg-12.3kB

Ввод кода (включая процесс расчета):

image_1d0k4kh9cke35v1d661l4khu1c4.jpg-14.3kB

Выходной результат:

Петля пример 3

Есть 100 юаней, 3 юаня за петуха, 5 юаней за курицу, 1 юань за 3 цыплят, просто купите 100 кур, по крайней мере, 1 на каждого типа курицы.
Q Наконец, есть несколько вариантов покупки

image_1d0k4nl9518sj1q2avpq1hmj12goch.jpg-19.6kB

Ввод кода:

image_1d0k4o91jttr15n91boedc7o4ocu.jpg-3.8kB

Выходной результат:

Интеллектуальная рекомендация


WECHAT MILLY WAY POINT CAMENT CARD - СОВРЕМЕННЫЕ СТРАНИЦЫ ПРОГЛЯЮТНОЕ ЗНАЧЕНИЕ (Запрос)

WECHAT Small Pass Pass Value и значение приобретения: 1. Установите способ настройки идентификатора идентифицирует значение параметра, передаваемое после прыжка; 2, используя метод Data-XXXX для идент.


Текущая задача Узел больше экземпляров


[Linux] Программирование сетевых сокетов UDP

Что такое протокол UDP Протокол UDP называетсяПротокол пользовательских датаграмм UDP - протокол транспортного уровня Без установления соединения, ненадежная передача, ориентированная на дейтаграмму П.



Основная идея обработки больших данных - разделяй и властвуй

Разделяй и властвуй - «разделяй и властвуй» Как мы все знаем, компьютеры очень быстрые и используются людьми. Однако независимо от того, насколько быстрым является компьютер, способность о.

Читайте также: