SAS中文论坛

标题: 帮忙! [打印本页]

作者: shiyiming    时间: 2006-3-23 22:11
标题: 帮忙!
各位高手帮忙呀!
我有这样一组数据
T    0.05   0.10  0.15   0.25  0.30   0.50    0.66   0.78
NO1   1.26  0.98  0.89  0.88  0.77  0.64 0.63  0.45
NO2   1.34  0.98  0.89  0.88  0.47  0.84 0.65  0.44
NO3   1.16  0.98  0.89  0.88  0.47  0.94 0.68  0.41
NO4   1.23  0.98  0.89  0.88  0.97  0.84 0.61  0.40
NO5   1.56  0.98  0.89  0.88  0.17  0.24 0.56  0.35
NO6   1.29  0.98  0.89  0.88  0.27  0.84 0.59  0.35
~
~
t表示时间,数值表浓度。我希望求出每个患者在这8个时间最大浓度时的时间,
我用了数组,可是问题好多呀~~~
帮忙呀!
作者: shiyiming    时间: 2006-3-24 21:49
标题: help
等待恢复呀
作者: shiyiming    时间: 2006-3-25 23:28
标题: 回你一个
试试下面的codes。Good luck!
[code:48064]
data c;
input x1 $3. x2-x9;
cards;
T   0.05 0.10 0.15 0.25 0.30 0.50 0.66 0.78
NO1 1.26 0.98 0.89 0.88 0.77 0.64 0.63 0.45
NO2 1.34 0.98 0.89 0.88 0.47 0.84 0.65 0.44
NO3 1.16 0.98 0.89 0.88 0.47 0.94 0.68 0.41
NO4 1.23 0.98 0.89 0.88 0.97 0.84 0.61 0.40
NO5 1.56 0.98 0.89 0.88 0.17 0.24 0.56 0.35
NO6 1.29 0.98 0.89 0.88 0.27 0.84 0.59 0.35
;
run;
proc print; run;
proc transpose data=c out=reso(drop=_name_);
run;
proc print;run;
data d (keep=time m);
array dd(8,6)_temporary_;
array t(8,1)_temporary_;
do i=1 to 8;
  set reso;
  array no(7) col1-col7;
  do j=1 to 6;
     dd(i,j)=no(j+1);
  end;
  t(i,1)=no(1);
end;
array com(8) com1-com8;
do i=1 to 6;
   do j=1 to 8;
     com(j)=dd(j,i);
   end;
   m=max(of com1-com8);
   do j=1 to 8;
     if com(j)=m then time=t(j,1);
   end;
   output;
end;
run;
proc print data=d;run;
[/code:48064]
作者: shiyiming    时间: 2006-3-26 15:54
标题: THANKS
看不全呀,可以发多一次么,谢谢了。前辈
作者: shiyiming    时间: 2006-3-26 15:57
标题: THANKS,IT'S OK.
THANKS,IT'S OK.
作者: shiyiming    时间: 2006-3-28 10:53
标题: 二维表转成一维表
我觉得可以从数据读入上做考虑,即将数据以此种方式读入:
subjetct time concentration。一旦按此格式存储数据,今后很多计算都会比较方便。更广泛的讲是将一个二维表转换成一维表。我觉得可以编一个通用的程序来处理。以下程序只是将concentration和subject数据读入,但是T没有读入。实际上subject也不是“读”进去的。我试着用#,@,+控制输入行和列,但是怎么也无法将三个变量一起读进去。谁能编一下吗?

[code:5c1d5]
data tst;
do subject=1 to 6;
   do j=0 to 7;
       input #(1+subject) @(5+j*5) con @@;
       output;
   end;
end;
datalines;
T 0.05 0.10 0.15 0.25 0.30 0.50 0.66 0.78
NO1 1.26 0.98 0.89 0.88 0.77 0.64 0.63 0.45
NO2 1.34 0.98 0.89 0.88 0.47 0.84 0.65 0.44
NO3 1.16 0.98 0.89 0.88 0.47 0.94 0.68 0.41
NO4 1.23 0.98 0.89 0.88 0.97 0.84 0.61 0.40
NO5 1.56 0.98 0.89 0.88 0.17 0.24 0.56 0.35
NO6 1.29 0.98 0.89 0.88 0.27 0.84 0.59 0.35
;
run;
[/code:5c1d5]
作者: shiyiming    时间: 2006-3-28 12:48
标题: to GEsas
没有必要把整个数据集读入array以后再处理,SAS有自己的语言特色!

我也刚接触SAS没多久,对array还有点一知半解的
[code:375b2]
data c;
input x1 $3. x2-x9;
cards;
T   0.05 0.10 0.15 0.25 0.30 0.50 0.66 0.78
NO1 0.98 0.89 1.26 0.88 0.77 0.64 0.63 0.45
NO2 1.34 0.98 0.89 0.88 0.47 0.84 0.65 0.44
NO3 0.98 0.89 0.88 0.47 1.16 0.94 0.68 0.41
NO4 1.23 0.98 0.89 0.88 0.97 0.84 0.61 0.40
NO5 0.98 0.89 0.88 0.17 0.24 0.56 1.56 0.35
NO6 1.29 0.98 0.89 0.88 0.27 0.84 0.59 0.35
;
run;

data result(keep=id max time);
set c;
array t(8) _temporary_;
array num(8) _numeric_;
if _n_=1 then do i=1 to 8;t(i)=num(i);end;
else
  do;
  k=1;
  do i=2 to 8;
    if num(k)<num(i) then k=i;
  end;
  id=x1;time=t(k);max=num(k);output;
  end;
run;
[/code:375b2]
作者: shiyiming    时间: 2006-3-28 12:52
标题: to maurice
我觉得改变数据格式是个好注意!#@%$&*!~好深奥的,不懂

[code:9e505]data c;
input x1 $3. x2-x9;
cards;
T   0.05 0.10 0.15 0.25 0.30 0.50 0.66 0.78
NO1 0.98 0.89 1.26 0.88 0.77 0.64 0.63 0.45
NO2 1.34 0.98 0.89 0.88 0.47 0.84 0.65 0.44
NO3 0.98 0.89 0.88 0.47 1.16 0.94 0.68 0.41
NO4 1.23 0.98 0.89 0.88 0.97 0.84 0.61 0.40
NO5 0.98 0.89 0.88 0.17 0.24 0.56 1.56 0.35
NO6 1.29 0.98 0.89 0.88 0.27 0.84 0.59 0.35
;
run;

data a(keep=subject time concentration);
set c;
array t(8) _temporary_;
array num _numeric_;
if _n_=1 then do i=1 to 8;t(i)=num(i);end;
else
  do i=1 to 8;
    subject=x1;time=t(i);concentration=num(i);
    output;
  end;
run;
[/code:9e505]
作者: shiyiming    时间: 2006-3-28 16:50
标题: To ajinomoto
挺好的,你的方法不错。又学到了一点,谢谢 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> !




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2