全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2611 5
2012-09-29
有一个数据集变量n,我设定的是当_N_满足某一条件的时候,n=_N_,然后retain n。在此之前的观测里n全部都是missing value. 大概就是:
obs n
1    .
2    .
3    .
4
5
6
7  _N_=7
8    7
9    7
10  7


现在我想要在条件n-6<_N_<n的时候,赋值另外一个variable=XXX,可是因为从头开始读起,当n<_N_时候的n全部都是missing value. 初学者,这个问题真的困惑了我老久也没想出好的解决办法
不知道有没有什么办法让obs 2-6的n assign一个常数值?我试了我知道的几种办法都无法让重新读第一条观测时的n能够仍然等于第一轮iteration里assign出的那个值。
另外在obs>n的情况下可以让n+1,但是在之前的观测中有办法让n倒序的安排从1-X的值么?
不知道问清楚了没,求大侠解惑!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-10-1 11:25:20
    求高人啊。。。要悬赏论坛币么?我不知道我还有没有……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-3 12:11:24
can not understand your question.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-4 05:50:46
看了好几遍,也没看太懂你要说什么。
如果想retain一个变量,而且又避免起初的只是空值的话,可以通过对其设置默认的初始值来实现,如 retain n 0; 意思是retain n,而且把它的初始值设置为0.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-8 10:26:23
我把代码贴出来吧。。
data pain;
    input   subjid :$8. score colldate : yymmdd8.;
    informat colldate;
    cards;
   10011001     7        20061004
   10011001     6        20061005
   10011001     6        20061006
   10011001     6        20061007
   10011001     9        20061010
   10011001     6        20061011
   10011001     3        20061012
   10011001     5        20061013
   10011001     6        20061014
   10011001     6        20061015
   10011001     6        20061016
   10011001     6        20061017
   10011001     3        20061018
   10011001     6        20061019
   10011001     6        20061020
   10011001     6        20061021
   10011001     6        20061022
   10011001     6        20061023
   10011001     6        20061024

;
run;

data drug;
    input   subjid :$8.  firstdosedt : yymmdd8.;
    informat firstdosedt;
    cards;
   10011001           20061014
;
   
run;


proc sort data=pain out=patient;
   by colldate;
run;

data newpatient;
   set drug;
   colldate=firstdosedt;
run;

data newpatient1;
   merge patient newpatient;
   by colldate;
   if firstdosedt=colldate  then do n=_N_;
     
     retain n;
     
   end;
  
   if n then i ="E";
   
         else
     if _N_>=n-7 and n ne . then do i="B";
end;
   if firstdosedt=colldate then do i="B";  end;
   format colldate mmddyy10.;
  
  
run;
----------
其实就是要把某个first dose日期以后的全部mark为E,之前的7天(包括当天)mark为B..
first dose date的_N_=9,但是取到9之后重新set数据才可以开始mark的流程,_N_就又变成0,1,2,3了……不知道这里要怎么操作……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-8 10:27:11
@ 一下。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群