thymeleaf 判断checkbox是否选中_一日看尽长安花——复选框(CheckBox)数据清洗和统计的SAS实现...

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

变量PastTreatment指曾经接受过哪些历史治疗,有的患者可能没有接受过治疗,有些患者可能曾经接受过1种治疗(比如吃某一种药物),还有些患者可能曾经接受过多种治疗(比如吃过某几种药物)。所以这个问题可以搜集到的数据是多种多样的。
根据这个数据集的数据字典的说明,PastTreatment一共有8个选项,范围为0-7,其中0代表未接受过历史治疗,1-7分别代表7种不同的历史治疗方式。
上图中目前针对当前CheckBox形式的变量PastTreatment,暂时无法直接进行数据分析。如果想对其进行分析首先要做的是将其转换为多个0/1变量,即新变量var0(是=1/否=0曾经接受过治疗),新变量var1(是否曾经接受过“1”类治疗),新变量var2(是否曾经接受过“2”类治疗),以此类推一直到新变量var7(是否接受过“7”类治疗)。如下图所示:

通过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的内部顺序是固定的,所以使用缩写列表法“--”减少输入内容,更加快捷。
更多推荐
所有评论(0)