我有 ID、重复认知测量 (cog1-cog6) 和开始时药物 (SSRI) 的数据。我最终将运行混合程序来确定时间点认知得分与 SSRI 之间的关联。
我的代码如下所示:
**getting relevant variables;
data ucognition;
set analyze (keep=
HHIDPN SSRI
cog1 cog2 cog3 cog4 cog5 cog6);
run;
proc transpose data=ucognition out=longcog (rename =(col1=CogScore) rename = (_name_=cog));
by HHIDPN SSRI;
var cog1 cog2 cog3 cog4 cog5 cog6;
run;
proc print data=longcog (obs=10);
run;
到此为止,一切都正常(我认为?)。以下代码是我尝试创建时间变量的地方:
data longcog2;
set longcog;
cog=cog1; time=1; output;
cog=cog2; time=2; output;
cog=cog3; time=3; output;
cog=cog4; time=4; output;
cog=cog5; time=5; output;
cog=cog6; time=6; output;
keep HHIDPN SSRI time cog;
run;
proc print data=longcog2 (obs=10);
run;
这里SAS说cog1,cog2,cog3,cog4,cog5,cog6还没有初始化。
观察 hhidpn SSRI 齿轮时间 1 10210020 无 SSRI 14 1 2 10210020 无 SSRI 13 2 3 10210020 无 SSRI 10 3 4 10210020 无 SSRI 14 4 5 10210020 无 SSRI 10 5 6 10210020 无 SSRI 11 6
我不确定如何解决这个问题,并尝试使用它们运行各种程序,但是当我尝试专门进行时间创建时没有任何反应。我的所有变量都是数字,所以我认为这不是问题。
我也尝试过这样跑步:
data ucognition;
set analyze (keep=
HHIDPN SSRI
cog1 cog2 cog3 cog4 cog5 cog6);
run;
proc transpose data=ucognition out=longcog (rename =(col1=CogScore) rename = (_name_=cog));
by HHIDPN SSRI **cog1 cog2 cog3 cog4 cog5 cog6**;
var cog1 cog2 cog3 cog4 cog5 cog6
;
run;
proc print data=longcog (obs=10);
run;
data longcog2;
set longcog;
cog=cog1; time=1; output;
cog=cog2; time=2; output;
cog=cog3; time=3; output;
cog=cog4; time=4; output;
cog=cog5; time=5; output;
cog=cog6; time=6; output;
keep HHIDPN SSRI time cog;
run;
proc print data=longcog2 (obs=10);
run;
这可行,但每个人都会重复 6 次,如下所示:
观察 hhidpn SSRI 齿轮时间 1 10210020 无 SSRI 14 1 2 10210020 无 SSRI 13 2 3 10210020 无 SSRI 10 3 4 10210020 无 SSRI 14 4 5 10210020 无 SSRI 10 5 6 10210020 无 SSRI 11 6 7 10210020 无 SSRI 14 1 8 10210020 无 SSRI 13 2 9 10210020 无 SSRI 10 3 10 10210020 无 SSRI 14 4 11 10210020 无 SSRI 10 5 12 10210020 无 SSRI 11 6
是否有一个原因“cog”是我的重命名name=cog变量,不会存储cog1-cog6?它们在初始数据中被命名为 r7cogtot-r12cogtot,但我被告知要这样重命名它们
我照常转换为长数据。我尝试根据重复认知得分创建一个时间变量,但 SAS 不允许我使用“cog”来保存 cog1-cog6,我不知道如何修复
转置是
ucognition
,显然具有变量 cog1
到 cog6
。
尝试
data longcog2;
set ucognition ;
...
而不是
data longcog2;
set longcog;
...
这些变量不在您正在读取的数据集中,因为您将它们转置为观察值。
为什么不直接使用转置数据集?您可能只能使用字符变量(您命名为COG)。
如果您需要将其转换为数字,只需使用 substr() 从名称中提取数字后缀,然后使用 INPUT() 将字符串转换为数字。
data longcog2;
set longcog;
time = input(substr(cog,4),32.);
rename CogScore=cog;
keep HHIDPN SSRI time CogScore;
run;