楼主: 小鳄鱼a
2744 10

取最后一个做新变量 不用拆分数据集 直接用data步 [推广有奖]

  • 6关注
  • 10粉丝

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

20论坛币
yearqtrvarlvar

1998

1

1

4

1998

2

2

4

1998

3

3

4

1998

4

4

4

1999

1

5

8

1999

2

6

8

1999

3

7

8

1999

4

8

8




取出每个year的 qtr=4  的var  作为新变量lvar取值   ,能否不拆分数据集并merge,直接用一个data步操作  

最佳答案

pobel 查看完整内容

data b; merge a(where=(qtr=4) keep=var qtr year rename=(var=Ivar)) a; by year; run;
关键词:data步 Data 最后一个 数据集 新变量
沙发
pobel 在职认证  发表于 2015-5-25 17:07:50 |只看作者 |坛友微信交流群
data b;
   merge a(where=(qtr=4) keep=var qtr year rename=(var=Ivar)) a;
   by year;
run;

使用道具

藤椅
舍身卫道 发表于 2015-5-25 21:19:15 |只看作者 |坛友微信交流群
不太明白你说的不拆分数据集并merge 什么意思?

使用道具

板凳
小鳄鱼a 发表于 2015-5-25 21:47:02 |只看作者 |坛友微信交流群
舍身卫道 发表于 2015-5-25 21:19
不太明白你说的不拆分数据集并merge 什么意思?
我的意思就是直接再一个data步里就可以完成了

使用道具

报纸
舍身卫道 发表于 2015-5-25 22:31:24 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2015-5-25 21:47
我的意思就是直接再一个data步里就可以完成了
merge的话用那些数据集,除了这个,用哪个变量匹配呢

使用道具

地板
小鳄鱼a 发表于 2015-5-26 20:58:11 |只看作者 |坛友微信交流群
pobel 发表于 2015-5-25 17:07
data b;
   merge a(where=(qtr=4) keep=var qtr year rename=(var=Ivar)) a;
   by year;
您好   如果我想按照   year  qtr 排序后取每个qtr的最后一个怎么写啊    假设有些year的qtr并不一样   比如  6  8  什么的   不能够  where(last.qtr)啊

使用道具

7
pobel 在职认证  发表于 2015-5-28 07:44:59 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2015-5-26 20:58
您好   如果我想按照   year  qtr 排序后取每个qtr的最后一个怎么写啊    假设有些year的qtr并不一样   比 ...
每个qtr的最后一个?
你的例子里,每行都是qtr最后一个。

使用道具

8
pobel 在职认证  发表于 2015-5-28 07:45:56 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2015-5-26 20:58
您好   如果我想按照   year  qtr 排序后取每个qtr的最后一个怎么写啊    假设有些year的qtr并不一样   比 ...
如果你是想取每一年的最后一个的话:

data a;
   input year        qtr        var;
   cards;
1998 1 1
1998 2 2
1998 3 3
1998 9 4
1999 1 5
1999 2 6
1999 3 7
1999 88 8
;


data b;
    set a(rename=(var=ivar));
        by year qtr;
        if last.year;
        do until(last.year);
           set a;
           by year qtr;
           output;
        end;
run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

9
小鳄鱼a 发表于 2015-5-28 08:04:38 |只看作者 |坛友微信交流群
pobel 发表于 2015-5-28 07:45
如果你是想取每一年的最后一个的话:

data a;
谢谢   能否讲讲运行步骤  程序没怎么看懂

使用道具

10
pobel 在职认证  发表于 2015-5-28 08:51:25 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2015-5-28 08:04
谢谢   能否讲讲运行步骤  程序没怎么看懂
大致步骤是这样:
1. 从a中读取记录(by year qtr),一直到last.year,也就是year 的最后一个qtr的记录。
    rename var=ivar可以保留下这最后一个qtr的IVAR;
2. 这时,从a里逐条读取记录,一直到last.year, 每一条都输出。
    在第一步 IVAR的基础上,把同一年的每个qtr的记录读进去,分别输出。

*每一圈 data---run处理一年的数据;
*两个set 语句里的数据集a,可以看成完全独立的数据集。
*do until()可以保证先读取,再判断(last.year)。所以前面的一句(if last.year)并不影响。
*前面那个set只是为了找到每一年最后qtr的IVAR,后面的do循环是把同一年每个qtr的记录和IVAR放到一起,分别输出。
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 04:16