2014-12-15 2 views
0

Это часть данного набора данных, projet.details_etest:SAS вычисление новых переменный для нового набора данных из существующего набора данных

"survey_instance_id" "user_id" "question_id" "Item_correct" 
'"2008"    "14389"  "4243"   "0" 
'"2008"    "14489"  "4243"   "1" 
'"2008"    "14499"  "4253"   "0" 
'"2008"    "1669"   "4253"   "1" 

Я хочу, чтобы создать новый набор данных под названием projet.resume_question, который содержит детали набора данных сортировать по question_id, содержащие переменные:

  • survey_instance_id
  • question_id
  • nb_correct_answers
  • nb_incorrect answers
  • nb_omitted_answers
  • nb_total_with_omitted_answers
  • nb_total_without_omitted_answers

Переменная nb_omitted_answers общее число участников минус nb_correct_answers, количество правильных ответов на вопрос, минус nb_incorrect_answers, число неверные ответы на вопрос.

Переменная nb_total_with_omitted_answers - общее количество участников, которые приняли участие в тестировании.

Переменная nb_total_without_omitted_answers - общее количество участников, которые ответили на каждый вопрос.

Вот что я сделал:

data projet.resume_question; 
set projet.details_etest; 
by question_id; 
keep survey_instance_id question_id nb_correct_answers nb_incorrect_answers; 
retain nb_correct_answers 0 nb_incorrect_answers 0; 
if Item_correct =1 then correct_answers= Item_correct; 
else if Item_correct =0 then incorrect_answers= Item_correct; 
nb_correct_answers = sum (correct_answers); 
nb_incorrect_answers= sum (incorrect_answers); 
run; 
proc print data=projet.resume_question; 
run; 

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

+1

Думаю, вам нужно привести пример ожидаемого окончательного набора данных, чтобы этот вопрос имел смысл. – Joe

ответ

0

Первый вид набора данных путем опроса, вопроса, участника.

proc sort data = projet.details_etest out = details; 
    by survey_instance_id question_id user_id; 
run; 

Теперь получите количество участников для каждого опроса.

proc sql; 
    create table participated as 
    select survey_instance_id, 
     count(distinct user_id) as nb_total_with_omitted_answers 
    from details 
    group by survey_instance_id; 
quit; 

Вычислить агрегаты путем опроса, вопрос.

data aggregated; 
    set details; 
    by survey_instance_id question_id; 

    retain nb_total_without_omitted_answers 
      nb_correct_answers nb_incorrect_answers 0; 

    if first.question_id then do; 
     nb_total_without_omitted_answers = 0; 
     nb_correct_answers = 0; 
     nb_incorrect_answers = 0; 
    end; 

    if item_correct in (0, 1) then nb_total_without_omitted_answers + 1; 

    if item_correct = 1 then nb_correct_answers + 1; 
    else if item_correct = 0 then nb_incorrect_answers + 1; 

    if last.question_id then output; 

    drop user_id item_correct; 
run; 

И наконец, вычислите количество пропущенных ответов на вопрос.

data projet.resume_question; 
    merge participated aggregated; 
    by survey_instance_id; 

    nb_omitted_answers = nb_total_with_omitted_answers - 
     nb_correct_answers - nb_incorrect_answers; 
run; 

Это должно получить то, что вам нужно.

+0

Спасибо :) Это именно то, что я хотел, чтобы вы были лучшими !!! –

+0

Рад, что я мог помочь. –

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