SAS:对多对ID进行比较

时间:2016-05-19 10:16:52

标签: sas comparison multiple-columns

我正在使用的数据源于“表示所有适用的数据”。题。两名评估者被要求完成一个独特的主题清单的问题。数据看起来像这样。

ID| Rater|Q1A|Q1B|Q1C|Q1D
------------------------
1 | 1    | A | F | E | B
1 | 2    | E | G | 
2 | 1    | D | C | A
2 | 2    | C | D | A

我想比较两位评价者'每个ID的答案,并确定Q1A-Q1D的答案是否相同。我对Q1A,Q1B等各个评估者之间的直接比较不感兴趣。我想知道Q1A-Q1D中的所有值是否相同。 (例如,在上面的示例数据中,ID 2的评估者将是相同的)。我假设我会用数组做这个。谢谢。

3 个答案:

答案 0 :(得分:1)

这似乎是call sortc的作业:

data have;
infile cards missover;
input ID  Rater (Q1A Q1B Q1C Q1D) ($);
cards;
1   1      A   F   E   B
1   2      E   G   
2   1      D   C   A
2   2      C   D   A
3   1      A   B   C
3   2      A   B   D
;
run;

/*You can use an array if you like, but this works fine too*/
data temp /view = temp;
  set have;
  call sortc(of q:);
run;

data want;
  set temp;
  /*If you have more questions, extend the double-dash list to cover all of them*/
  by ID Q1A--Q1D notsorted;
  /*Replace Q1D with the name of the variable for the last question*/
  IDENTICAL_RATERS = not(first.Q1D and last.Q1D);
run;

答案 1 :(得分:1)

以下是使用call sortc的类似解决方案,而是使用向量和保留变量。

创建示例数据集

data ratings;
  infile datalines truncover;
  input ID Rater (Q1A Q1B Q1C Q1D) ($);
  datalines;
1 1 A F E B
1 2 E G
2 1 D C A
2 2 C D A
3 1 A B C
3 2 A B D
;

进行比较

data compare(keep=ID EQUAL);
  set ratings;
  by ID;
  format PREV_1A PREV_Q1B PREV_Q1C PREV_Q1D $1.
         EQUAL 1.;
  retain PREV_:;
  call sortc(of Q1:);
  array Q(4) Q1:;
  array PREV(4) PREV_:;
  if first.ID then do;
    do _i = 1 to 4;
      PREV(_i) = Q(_i);
    end;
  end;
  else do;
    EQUAL = 1;
    do _i = 1 to 4;
      if Q(_i) NE PREV(_i) then EQUAL = 0;
    end;
    output;
  end;
run;

结果

ID EQUAL 
1  0 
2  1 
3  0 

答案 2 :(得分:0)

排序,连接,然后比较。

-