46a7df2ebf0e5dec75119ee0ce3e9f97.png

CheckBox(复选框)数据通常来自于问卷调查中的多项选择题。一般在数据录入的时候为了方便录入会用“,”作为分隔符,同时记录多种选择,以下形式出现(变量PastTreatment):

853119ec8b26179a8b9a08b264f4ebbb.png

变量PastTreatment指曾经接受过哪些历史治疗,有的患者可能没有接受过治疗,有些患者可能曾经接受过1种治疗(比如吃某一种药物),还有些患者可能曾经接受过多种治疗(比如吃过某几种药物)。所以这个问题可以搜集到的数据是多种多样的。

根据这个数据集的数据字典的说明,PastTreatment一共有8个选项,范围为0-7,其中0代表未接受过历史治疗,1-7分别代表7种不同的历史治疗方式。

上图中目前针对当前CheckBox形式的变量PastTreatment,暂时无法直接进行数据分析。如果想对其进行分析首先要做的是将其转换为多个0/1变量,即新变量var0(是=1/否=0曾经接受过治疗),新变量var1(是否曾经接受过“1”类治疗),新变量var2(是否曾经接受过“2”类治疗),以此类推一直到新变量var7(是否接受过“7”类治疗)。如下图所示:

85bcef673b9f61f8c6c1938652258429.png

通过SAS实现以上的过程,使用macro非常高效,代码如下:

%macro checkbox(data= ,var= ,a= ,b= );/*data为输入数据集,var为需要转换的CheckBox数据,a为起始值,b为结束值*/
	data out;
		set &data; 
		var1=CATT(",",&var,",");
		%Do i=&a % to &b;
			&var&i=IFN(INDEXW(var1,"&i",","),1,0);
		%End; 
	run; 
%mend checkbox;
%checkbox

将macro命名为CheckBox,其中函数CATT的作用是在宏变量&var前后插入分隔符“,”,这样做的目的是为了防止当选项超出0-9的范围,比如当选项出现“10”时,其中的十位数1可能和“1”产生混淆。此外函数IFN用于判断结果是否为真,INDEXW用于查找字符返回其位置。


统计分析则采用PROC FREQ利用多个2*2表格进行卡方检验计算即可:

proc freq data=out;
	table group*(pasttreatment0--pasttreatment7)/chisq;
run;

因为pasttreatment0到pasttreatment7的内部顺序是固定的,所以使用缩写列表法“--”减少输入内容,更加快捷。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐