楼主: zyzj1985
5555 17

[原创博文] 求助,如何将一整列数据向上挪动? [推广有奖]

  • 0关注
  • 0粉丝

高中生

72%

还不是VIP/贵宾

-

威望
0
论坛币
26 个
通用积分
0.4500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
543 点
帖子
21
精华
0
在线时间
29 小时
注册时间
2010-9-20
最后登录
2025-3-31

楼主
zyzj1985 发表于 2012-2-1 13:41:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题,假如数据是
1
2
3
4
5

我想要的效果是
1   2
2   3
3   4
4   5
5   .
请问有什么方法吗?多谢各位
二维码

扫码加我 拉你入群

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

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

关键词:什么方法 如何

回帖推荐

maidenhan 发表于4楼  查看完整内容

data test01; do id = 1 to 10; output; end; run; data test02(drop = id); retain id1; set test01 nobs = n; if _n_ = 1 then id1 = id; else do; id2 = id; output; id1 = id; if _n_ = n then do; id2 = .; output; end; end; run;

本帖被以下文库推荐

沙发
crighton 发表于 2012-2-1 14:03:51
有个很笨的方法,倒序排序一下成54321再lag一个然后再顺序排回来……→→

藤椅
zhangzachary 发表于 2012-2-1 14:10:39
  1. data a;
  2. do i=1 to 5;
  3. output;
  4. end;
  5. run;

  6. data b;
  7. merge a a(firstobs=2 rename=(i=b));
  8. run;
复制代码
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

板凳
maidenhan 发表于 2012-2-1 14:13:01
data test01;
        do id = 1 to 10;
                output;
        end;
run;
data test02(drop = id);
        retain id1;
        set test01 nobs = n;
        if _n_ = 1 then id1 = id;
        else do;
                id2 = id;
                output;
                id1 = id;
                if _n_ = n then do;
                        id2 = .;
                        output;
                end;
        end;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

报纸
zyzj1985 发表于 2012-2-1 14:15:50
crighton 发表于 2012-2-1 14:03
有个很笨的方法,倒序排序一下成54321再lag一个然后再顺序排回来……→→
额。。。谢谢,这个1.2.3.4.5 只是举个例子。原始数据很麻烦。。。有上万个,对应着300个ID,每个ID大概包括几百条数据。我需要找出每个ID的第一条数据和最后一条数据,便于做后续的分析。我现在是想把ID 列的数据整体下降(LAG FUNCTION)和整体上升(? FUCNTION),用这3列数据相互运算,求出各个ID的起始,结束点。

数据本身不是完全的正序或倒序而是到一定数量就重头再来一遍,如果我要倒序的话会打乱ID对应的原数据顺序,即使我之后用BY ID 来整理,也不是原始数据的顺序了。所以我想知道有没有能直接把整列数据向上挪动的FUNCTION~
[fly]一二三四五,上山打老虎[/fly]

地板
zhangzachary 发表于 2012-2-1 14:20:41
zyzj1985 发表于 2012-2-1 14:15
额。。。谢谢,这个1.2.3.4.5 只是举个例子。原始数据很麻烦。。。有上万个,对应着300个ID,每个ID大概包 ...
需要找出每个ID的第一条数据和最后一条数据
这个可以by id 后用first.id last.id 找……
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

7
zyzj1985 发表于 2012-2-1 14:30:59
zhangzachary 发表于 2012-2-1 14:20
这个可以by id 后用first.id last.id 找……
额,不光是找出来,是要确定出每个ID的第一和最后一列数据,然后将中间数据删除掉,相当于最后把上万个数据缩到几千甚至几百个。。。这个FIRST.ID 和 LAST.ID可以实现吗?
[fly]一二三四五,上山打老虎[/fly]

8
zhangzachary 发表于 2012-2-1 14:39:53
zyzj1985 发表于 2012-2-1 14:30
额,不光是找出来,是要确定出每个ID的第一和最后一列数据,然后将中间数据删除掉,相当于最后把上万个数 ...
可以啊,找出来就是指同时删掉不需要的。

proc sort data=yourdata; by id; run;

data aim;
set yourdata;
by id;
if first.id or last.id;
run;
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

9
zyzj1985 发表于 2012-2-1 14:55:46
zhangzachary 发表于 2012-2-1 14:39
可以啊,找出来就是指同时删掉不需要的。

proc sort data=yourdata; by id; run;
谢谢,我先试试看
[fly]一二三四五,上山打老虎[/fly]

10
zyzj1985 发表于 2012-2-1 16:01:47
zhangzachary 发表于 2012-2-1 14:39
可以啊,找出来就是指同时删掉不需要的。

proc sort data=yourdata; by id; run;
这个的确可以达到我想要的结果,不过还是要用到上挪数据列的方式。。。有没有ANTILAG这样的FUNCTION呢?多谢
[fly]一二三四五,上山打老虎[/fly]

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 05:41