按组复制 SAS 中的值 [英] Replicating values in SAS by group

查看:17
本文介绍了按组复制 SAS 中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据集,其中包含测量结果和收集数据的具体日期.我想在几天之间复制这些值,直到最后一个测量日.例如,这里是复制前的数据:

 测量日主题1 .85 -1主题1 .86 1主题 1 .91 7主题 1 .83 9主题 2 .77 0主题 2 .82 5主题 2 .86 12

我想修改上面的数据集,如下所示:

 测量日主题1 .85 -1主题1 .85 0主题1 .86 1主题 1 .86 2主题 1 .86 3主题1 .86 4主题1 .86 5主题1 .86 6主题 1 .91 7主题 1 .91 8主题 1 .83 9主题 2 .77 0主题 2 .77 1主题 2 .77 2主题 2 .77 3主题 2 .77 4主题 2 .82 5主题 2 .82 6主题 2 .82 7主题 2 .82 8主题 2 .82 9主题 2 .82 10主题 2 .82 11主题 2 .86 12

解决方案

您可以通过将合并后的数据偏移一行并省略 by 语句来进行前瞻合并";p>

(假设您的数据按主题和日期排序)

<上一页>数据合并1;合并有有 (rename=(day=nextday subject=nextsubject) drop=measurement firstobs=2) ;如果 subject = nextsubject 然后 _day = day to nextday - 1 ;输出 ;结尾 ;否则做;_day = 天;输出 ;结尾 ;drop day nextday next 主题;重命名_day =天;跑 ;

I have a data set containing a measurement and the specific day it was collected. I would like to replicate the values between days, up until the last measurement day. For example, here is the data before it is replicated:

           Measurement    Day
Subject1   .85            -1
Subject1   .86            1            
Subject1   .91            7            
Subject1   .83            9            
Subject2   .77            0            
Subject2   .82            5            
Subject2   .86            12           

I would like to modify the data set above to look like the following:

           Measurement    Day
Subject1   .85            -1
Subject1   .85            0
Subject1   .86            1
Subject1   .86            2
Subject1   .86            3
Subject1   .86            4
Subject1   .86            5 
Subject1   .86            6           
Subject1   .91            7
Subject1   .91            8            
Subject1   .83            9            
Subject2   .77            0
Subject2   .77            1
Subject2   .77            2
Subject2   .77            3
Subject2   .77            4       
Subject2   .82            5          
Subject2   .82            6
Subject2   .82            7     
Subject2   .82            8     
Subject2   .82            9     
Subject2   .82            10
Subject2   .82            11                      
Subject2   .86            12           

解决方案

You can do a 'look ahead merge' by offsetting the merged data by one row, and omitting the by statement;

(assumes your data is sorted by Subject and Day)

data merge1 ;
  merge have
        have (rename=(day=nextday subject=nextsubject) drop=measurement firstobs=2) ;

  if subject = nextsubject then do _day = day to nextday - 1 ;
    output ;
  end ;
  else do ;
    _day = day ;
    output ;
  end ;

  drop day nextday nextsubject ;
  rename _day = day ;
run ;

这篇关于按组复制 SAS 中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆