数据丢失时的SAS转置

数据丢失时的SAS转置,sas,transpose,Sas,Transpose,我有一个数据集,包含在不同时间点进行的大量实验室测试。我试图将数据集从长到宽进行转换,但问题是实验室测试根据测试类型在不同的时间点进行。当我转换它时,我失去了分辨结果来自哪个时间点的能力。请参见下面的示例代码: *Create test data; data long; do subject=1 to 10; do test=1 to 3; do visit=1 to 3; result=rand("Uniform"); ou

我有一个数据集,包含在不同时间点进行的大量实验室测试。我试图将数据集从长到宽进行转换,但问题是实验室测试根据测试类型在不同的时间点进行。当我转换它时,我失去了分辨结果来自哪个时间点的能力。请参见下面的示例代码:

*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;

对于示例数据,您只需要在PROC TRANSPOSE代码中添加一条ID语句。这样,它将使用VISIT的值来命名结果列。您可能还希望将PREFIX=选项添加到PROC TRANSPOSE语句中

proc transpose data=long out=wide prefix=visit;
  by subject test ;
  id visit ;
  var result;
run;