2013-06-11 4 views
0

(первая публикация)
У меня есть набор данных, где мне нужно создать новую переменную (в SAS), исходя из условия, связанного с другой переменной. Таким образом, данные содержат три переменные из опроса: сайт, IDnumb (человек) и дата. Может быть несколько ответов от разных людей, но на том же сайте (см. Личность 1 и 3 с сайта A).Новая переменная SAS, зависящая от наблюдений

Site IDnumb Date 
    a  1  6/12 
    b  2  3/4 
    c  4  5/1 
    a  3  . 
    d  5  . 

Я хочу создать новую переменную под названием Complete, но она не может содержать дубликаты. Поэтому, когда я перехожу к proc freq, я хочу, чтобы сайт A был подсчитан один раз, используя 6/12 Date of Completed Survey. Поэтому в основном, если сайт представлен дважды и содержит дату в одном, я хочу только считать это и игнорировать дублированный сайт без даты.

   N % 

Complete  3 75% 
Last Month  1 25% 

Мой вопрос может быть вокруг возможностей NODUP и NODUPKEY. Если я сделаю Proc Sort (nodupkey) по сайту и дате, это устранит obs «a 3»?

Любая помощь была бы принята с благодарностью. Извините за беспорядочную «таблицу», так как это мой первый пост (намеки на то, что это лучше, также приветствуются).

+0

Вы решаете, как записывать эти данные или у вас есть данные, с которыми вам нужно работать? –

+0

Чтобы отправить код или таблицу, введите ее без БР, выделите ее, а затем нажмите control-K. – Joe

+0

Можете ли вы разместить желаемый выходной стол? Вы говорите, что хотите новую переменную, вы действительно этого хотите? Что бы это содержало? – Joe

ответ

2

Вы можете сделать это несколькими способами.

Прежде всего вам нужна полная/неполная двоичная переменная. Если вы все равно находитесь в datastep, возможно, просто все это сделает.

proc sort data=yourdata; 
by site date descending; 
run; 

data yourdata_want; 
set yourdata; 
by site date descending; 
if first.site then do; 
comp = ifn(date>0,1,0); 
output; 
end; 
run; 

proc freq data=yourdata_want; 
tables comp; 
run; 

Если вы использовали NODUPKEY, вы бы первый отсортировать их по дате SITE DESCENDING, затем САЙТ с NODUPKEY. Таким образом, последняя дата вверх. Вы также можете форматировать COMP, чтобы иметь список текстовых меток, а не только 1/0.

Вы также можете сделать это с помощью формата DATE, чтобы вы могли пропустить шаг данных (по-прежнему нужен сортировка/сортировка nodupkey). Отформатируйте все значения без пробелов DATE до «Завершить» и пропустив значение даты в «Последний месяц», а затем включите отсутствующий параметр в вашей частоте proc.

Наконец, вы можете сделать таблицу в SQL (хотя получение двух строк, как это немного сложнее, вы должны объединить два запроса UNION).

+0

Большое вам спасибо! Один (последний) вопрос с «comp = ifn (date> 0,1,0)». Именно поэтому я понимаю этот шаг. Это создает новую переменную «comp», где, если дата больше 0, SAS вводит значение «1», а если не больше 0, SAS вводит «0»? – Jebediah15

+1

Да. IFN похож на инструкцию Excel IF - 'ifn (логическое выражение, return-if true, return-if false, return-if-missing); хотя« missing »обычно невозможно. – Joe

+0

Я, как правило, непосредственно присваиваю «булевский» результат в этой ситуации, то есть «comp = (date> 0);».SAS преобразует результат как True = 1, False = 0, поэтому он дает точный результат. Мне легче понять, что происходит, когда я просматриваю свой код. –