楼主: wdxmahone
6260 8

[原创博文] sas滞后多项的处理 [推广有奖]

  • 0关注
  • 1粉丝

已卖:348份资源

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
12568 个
通用积分
0
学术水平
2 点
热心指数
3 点
信用等级
2 点
经验
3518 点
帖子
121
精华
0
在线时间
155 小时
注册时间
2010-1-11
最后登录
2022-9-4

楼主
wdxmahone 发表于 2010-4-9 14:52:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有一组数是这样的:
code name n
   1      aa    0
   1              1
   1              2
   1      cc    0
   1              1
   2      bb    0
   2              1
   2              2
我想处理成这样子的:
code name n
   1      aa    0
   1      aa    1
   1      aa    2
   1      cc    0
   1      cc    1
   2      bb    0
   2      bb    1
   2      bb    2
就是相当于采用函数name=lag&n(name)来处理,这个怎么操作啊?
谢谢大家!!!
二维码

扫码加我 拉你入群

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

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

关键词:name code 怎么操作 ODE COD

回帖推荐

crackman 发表于5楼  查看完整内容

proc sql; select max(n) as n into:n from crackman where name='m'; quit; %crackman; %macro crackman; data crackman4; set crackman; %do i=1 %to &n.; name&i.=lag&i.(name); if n=&i. then name=name&i.; drop name&i.; %end; run; %mend crackman;

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-4-9 16:00:38
  1. data b;
  2.         retain name;
  3.         set a(rename=(name=name1));
  4.         if name1^="" then name=name1;
  5.         drop name1;

  6. run;
复制代码
希望是对的
Let them be hard, but never unjust

藤椅
wdxmahone 发表于 2010-4-9 16:35:13
2# soporaeternus

谢谢哈,这种思路不错,应该能够解决我的问题。但是我想知道怎么样运用n那个变量,就像我前面说的lag&n()函数,让n的数能够取变量n的值,不知道我说清楚了没?

板凳
crackman 发表于 2010-4-9 22:14:23
data crackman;
missing m;
input code name$ n;
cards;
1  aa 0
1  m  1
1  m  2
1  cc 0
1  m  1
2  bb 0
2  m  1
2  m  2
;
run;
data crackman(drop=name1 name2);
set crackman;
name1=lag(name);
name2=lag2(name);
if n=1 then name=name1;
if n=2 then name=name2;
run;

报纸
crackman 发表于 2010-4-9 22:39:48
proc sql;
select max(n) as n into:n from crackman where name='m';
quit;
%crackman;
%macro crackman;
data crackman4;
set crackman;
%do i=1 %to &n.;
name&i.=lag&i.(name);
if n=&i. then name=name&i.;
drop name&i.;
%end;
run;
%mend crackman;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

地板
wdxmahone 发表于 2010-4-10 20:38:08
5# crackman

是啊是啊,就是在等待宏呢!

7
crackman 发表于 2010-4-10 21:05:43
希望能给你一点帮助吧
觉得这个宏写起来效率很低
特别是SQL
各位高人指点哈应该怎么改进 谢谢

8
Jackywolf_2008 发表于 2010-4-14 16:52:38
为什么要用宏,不是什么程序都要用宏的,用lag(1)不就可以了吗,那个变量n可以不用

9
soporaeternus 发表于 2010-4-14 17:07:49
LZ的意思是怎么即时把n的值赋给lagN函数的N,我比较憎恶lagN函数为什么不把阶数作为一个参数,按楼主的意思的话比较难实现。现在我想到的比较接近的是用if-else或是case-select来穷举,但是不忧。

纯粹为了实现这个需求的话不用这么麻烦,办法还是很多的
Let them be hard, but never unjust

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

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