SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 825|回复: 8
打印 上一主题 下一主题

帮忙!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2006-3-23 22:11:20 | 只看该作者

帮忙!

各位高手帮忙呀!
我有这样一组数据
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个时间最大浓度时的时间,
我用了数组,可是问题好多呀~~~
帮忙呀!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2006-3-24 21:49:47 | 只看该作者

help

等待恢复呀
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2006-3-25 23:28:50 | 只看该作者

回你一个

试试下面的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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2006-3-26 15:54:06 | 只看该作者

THANKS

看不全呀,可以发多一次么,谢谢了。前辈
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2006-3-26 15:57:44 | 只看该作者

THANKS,IT'S OK.

THANKS,IT'S OK.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2006-3-28 10:53:50 | 只看该作者

二维表转成一维表

我觉得可以从数据读入上做考虑,即将数据以此种方式读入:
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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2006-3-28 12:48:04 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2006-3-28 12:52:35 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2006-3-28 16:50:46 | 只看该作者

To ajinomoto

挺好的,你的方法不错。又学到了一点,谢谢 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> !
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 18:33 , Processed in 0.072047 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表