Sas 需要根据个人阳性检测结果保留实验室类别检测

Sas 需要根据个人阳性检测结果保留实验室类别检测,sas,Sas,您好,这是我的数据样本(对于这些测试组,还有一列LBCAT=尿液分析) 我被要求只包括为这些测试中的任何一个填充LBNRIND的测试面板,其余的将被删除。一些受试者在不同的就诊时间点有多个测试结果,而其他受试者只有1个。我不能在数据步骤中使用简单的where LBNRIND ne“”,因为我需要整个尿液分析测试面板,而不仅仅是特定的测试结果。这里最好的方法是什么?我认为转换数据会太混乱,但可能会将变量放入数组/宏中,并利用do循环进行这些测试 更新:我已经尝试了这段代码,但它没有保留lb_nr

您好,这是我的数据样本(对于这些测试组,还有一列LBCAT=尿液分析)

我被要求只包括为这些测试中的任何一个填充LBNRIND的测试面板,其余的将被删除。一些受试者在不同的就诊时间点有多个测试结果,而其他受试者只有1个。我不能在数据步骤中使用简单的where LBNRIND ne“”,因为我需要整个尿液分析测试面板,而不仅仅是特定的测试结果。这里最好的方法是什么?我认为转换数据会太混乱,但可能会将变量放入数组/宏中,并利用do循环进行这些测试

更新:我已经尝试了这段代码,但它没有保留lb_nrind>0的相应测试。如果我将总和(lb_nrind>'')应用于having子句,则与将lb_nrind>''应用于having子句时相同

*proc sql; 

*create table want as 
select * from labUA 
group by ptno and day and lb_cat
having sum(lb_nrind > '') > 0   ; 

data want2;
do _n_ = 1 by 1 until (last.ptno);
set labUA;
by ptno period day hour ;
if not flag_group then flag_group = (lb_nrind > '');
end;   

do _n_ = 1 to _n_; 
set want; 
if flag_group then output;
end;   

drop flag_group; run;*

您可以使用
SQL
HAVING
子句来保留满足某些聚合条件的组行。在您的情况下,该组可能是一个
patientid、panelid
和至少一个
LBNRIND not NULL

例如:

考虑此示例,仅当组中至少有一行符合标准
result7=77

两个代码块都使用SAS功能,即逻辑求值为
1
表示真,为
0
表示假

SQL

data have;
  infile datalines missover;
  input id test $ parm $ result1-result10;
  datalines;
1 A P 1 2 . 9 8 7 . . . .
1 B Q 1 2 3
1 C R 4 5 6
1 D S 8 9 . . . 6 77
1 E T 1 1 1
1 F U 1 1 1
1 G V 2
2 A Z 3
2 B K 1 2 3 4 5 6 78
2 C L 4
2 D M 9
3 G N 8
4 B Q 7
4 D S 6
4 C 1 1 1 . . 5 0 77
;

proc sql;
  create table want as 
  select * from have
  group by id
  having sum(result7=77) > 0
  ;
道琼斯指数循环

data want;
  do _n_ = 1 by 1 until (last.id);
    set have;
    by id;
    if not flag_group then flag_group = (result7=77);
  end;

  do _n_ = 1 to _n_;
    set have;
    if flag_group then output;
  end;

  drop flag_group;
run;

你的要求是什么还不清楚。我不知道你是在跨行还是跨列工作。显示您的数据和预期输出会更有帮助。请以文本而不是图像的形式发布数据,我们不能对图像做任何事情。您可以查看CMISS(),它将计算一组变量中缺失的数量<代码>如果cmiss(lborresu的——lbcat)=0将确保所有行的lborresu和lbcat之间的所有变量值都不丢失。你能澄清一下我错在哪里吗?感谢您的帮助。您的标准评估可以从
(lb\u nrind>“”)
更改为
(未丢失(lb\u nrind))