2013-04-04 3 views
0

Я работаю над набором данных (DATA), который имеет 3 переменные (Var1, Var2, Var3) в формате, который мне нужно изменить. Переменные относятся к специальному формату даты (например, цели, например OLDFMT1), и мне нужно изменить их в обычный формат даты SAS с помощью функции DATEPART.Использование инструкции ARRAY с итеративным оператором DO

Проблема в том, что мне нужно выполнить это на одном шаге данных, используя как цикл do, так и массив, который вызывает функцию DATEPART. Функция DIM должна использоваться, используемая прямо в массиве, и я должен отказаться от индекса varaible (i), прежде чем закончить набор данных.

Затем я должен применить DATE9. функция для этих измененных переменных.

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

+0

Позвольте мне уточнить, поскольку я был недостаточно конкретным. 3 переменные имеют 3 совершенно разных имени (например: var1, secondOne, thirdvar) и не находятся в последовательных местах (то есть они не находятся в столбцах 1 - 3, а в чем-то вроде столбца 8, 24, 41). Также, как полезный вкладчик отметил, Date9. это формат, а не функция. –

+0

Вы все еще можете использовать решение Боба как есть; он использует ярлык для определения массива, но вы все равно можете использовать его - array allvars var1 secondOne thirdvar; будет работать точно так же, как и его список. – Joe

ответ

2

Говоря, что вы хотите использовать функцию DATEPART, вы подразумеваете, что ваши три существующие переменные в настоящее время хранятся как значения SAS «дата-время». Попробуйте следующее:

data have; 
    var1 = datetime(); 
    var2 = datetime(); 
    var3 = datetime(); 
    format var1-var3 datetime19.; 
run; 

data want; 
    set have; 
    array allvars(*) var1-var3; 
    do i=1 to dim(allvars); 
     allvars(i) = datepart(allvars(i)); 
     end; 
    format var1-var2 date9.; 
    drop i; 
run; 

Пожалуйста, помните, что SAS имеет только два типа данных (числовой и символ). Даты, времена и даты только «известны» как таковые при использовании с соответствующим форматом. В SAS:

  • дата это количество дней, прошедших с 1 января 1960
  • время это количество секунд, прошедших с полуночи
  • DateTime это количество секунд, прошедших с 1 января 1960 года.

И обратите внимание, что date9. не является функцией; это формат. Существует множество различных форматов, которые могут быть использованы для «выставления» базового значения переменной, но само значение не изменяется. Это одна из действительно полезных функций программирования SAS.

+0

Спасибо за помощь! –

0

Если вы хотите, чтобы данные были отформатированы как DATE9., А не должны храниться как дата, вы можете применить префикс DT к любому формату даты и применить его к значению даты и времени. Итак, DTDATE9. формат отобразит значение даты и времени в формате даты9.

 Смежные вопросы

  • Нет связанных вопросов^_^