缺少数据时的 SAS 转置
SAS transpose when data are missing
我有一个数据集,其中包含在不同时间点进行的大量实验室测试。我试图将数据集从长转置到宽,但问题是实验室测试根据测试类型发生在不同的时间点。当我转置它时,我无法判断结果来自哪个时间点。请参阅下面的示例代码:
*Create test data;
data long;
do subject=1 to 10;
do test=1 to 3;
do visit=1 to 3;
result=rand("Uniform");
output;
end; end; end;
run;
*Now remove records at certain visits depending upon the test type;
data long; set long;
if test=2 and visit=2 then delete;
if test=3 and visit=1 then delete;
run;
*Sort and transpose;
*Test 2 should only be at visit 1 and 3, and test 3 at visits 2 and 3;
*This transpose does not accomplish that goal;
proc sort data=long; by subject test visit;run;
proc transpose data=long out=wide;
by subject test ;
var result;
run;
对于您的示例数据,您只需将 ID 语句添加到您的 PROC TRANSPOSE 代码中。这样它将使用 VISIT 的值来命名结果列。您可能还想将 PREFIX= 选项添加到 PROC TRANSPOSE 语句。
proc transpose data=long out=wide prefix=visit;
by subject test ;
id visit ;
var result;
run;
我有一个数据集,其中包含在不同时间点进行的大量实验室测试。我试图将数据集从长转置到宽,但问题是实验室测试根据测试类型发生在不同的时间点。当我转置它时,我无法判断结果来自哪个时间点。请参阅下面的示例代码:
*Create test data;
data long;
do subject=1 to 10;
do test=1 to 3;
do visit=1 to 3;
result=rand("Uniform");
output;
end; end; end;
run;
*Now remove records at certain visits depending upon the test type;
data long; set long;
if test=2 and visit=2 then delete;
if test=3 and visit=1 then delete;
run;
*Sort and transpose;
*Test 2 should only be at visit 1 and 3, and test 3 at visits 2 and 3;
*This transpose does not accomplish that goal;
proc sort data=long; by subject test visit;run;
proc transpose data=long out=wide;
by subject test ;
var result;
run;
对于您的示例数据,您只需将 ID 语句添加到您的 PROC TRANSPOSE 代码中。这样它将使用 VISIT 的值来命名结果列。您可能还想将 PREFIX= 选项添加到 PROC TRANSPOSE 语句。
proc transpose data=long out=wide prefix=visit;
by subject test ;
id visit ;
var result;
run;