楼主: sophiesdaisy
2405 7

[原创博文] 求助关于if else 的问题 [推广有奖]

  • 3关注
  • 1粉丝

已卖:509份资源

讲师

41%

还不是VIP/贵宾

-

威望
0
论坛币
4241 个
通用积分
11.1793
学术水平
5 点
热心指数
6 点
信用等级
3 点
经验
11216 点
帖子
423
精华
0
在线时间
456 小时
注册时间
2008-3-4
最后登录
2024-8-21

楼主
sophiesdaisy 发表于 2012-5-17 10:43:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. %let kk=%eval(&m-1);
  2. %put &m;
  3. %put &kk;
  4. data final_result&m.;
  5. if &m^=1 then set final_result&kk. fund.mine_mean&m.;
  6. else set fund.mine_mean&m.;
  7. run;
复制代码

这段程序的目的是希望能够通过循环批量的将数据集纵向合并到一起,但是第一个数据集 也就算是final_result1 总是没法合并进去,请问有哪位大神能够帮助我解决这个问题吗?
二维码

扫码加我 拉你入群

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

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

关键词:else ELS LSE Result final

回帖推荐

zhangzachary 发表于2楼  查看完整内容

请把循环补完,把宏写全。否则这样的程序不太好读。另外最好把实际的datasets用简单的test datasets来代替,方便大家测试,因为不是每个人都有"fund"这样的library的。我随手写了个简单的循环,没有发现什么问题。

本帖被以下文库推荐

沙发
zhangzachary 发表于 2012-5-17 15:43:24
请把循环补完,把宏写全。否则这样的程序不太好读。另外最好把实际的datasets用简单的test datasets来代替,方便大家测试,因为不是每个人都有"fund"这样的library的。
  1. data fin1;x=1;run;
  2. data fin2;x=2;run;
  3. data mean1;x=3;run;
  4. data mean2;x=4;run;
  5. data mean3;x=5;run;

  6. %macro ff;
  7. %let m=3;
  8. %do %until(&m=1);
  9. %let kk=%eval(&m-1);
  10. %put &m;
  11. %put &kk;
  12. data fin&m.;
  13. if &m^=1 then set fin&kk. mean&m.;
  14. else set mean&m.;
  15. run;
  16. %let m=&kk;
  17. %end;
  18. %mend;
  19. %ff;
复制代码
我随手写了个简单的循环,没有发现什么问题。
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

藤椅
sophiesdaisy 发表于 2012-5-18 09:43:18
zhangzachary 发表于 2012-5-17 15:43
请把循环补完,把宏写全。否则这样的程序不太好读。另外最好把实际的datasets用简单的test datasets来代替, ...
谢谢,谢谢你的全部意见~ 我总是着急找答案,忽略了其他人的感受 。。 嘿嘿

板凳
sophiesdaisy 发表于 2012-5-18 10:21:11
zhangzachary 发表于 2012-5-17 15:43
请把循环补完,把宏写全。否则这样的程序不太好读。另外最好把实际的datasets用简单的test datasets来代替, ...
我的一小段程序确实容易引起误解,其实我想实现的目标是在我定义宏每次生成新的数据集mine_mean&m 的时候,就将这个新的数据集中的数据放入我想final_result中,其实先用宏全部生成,在全部用set纵向合并也是可以的,但是比较的累赘,而且不便修改参数,所以我的做法是用两个数据集倒腾,其中之一是final_result,另外一个是mine_mean,具体做法是如果宏生成了第一个数据集mine_mean1,就直接赋给final_result,也就是
if &m=1,set mine_mean&m;
如果不是第一个数据集,那么就直接将上一次宏生成的数据集final_result&kk  (这里kk提前设置为&m-1)还有mine_mean&m(也就是新生成的数据集)一起set进去,形成纵向合并,
比如 mine_mean1  为 1   1    1 ;那么final_result1应该是  1  1   1;mine_mean2 是 2   2   2  ;那么 final_result2 应该是    1    1    1
                              2    2     2


不知道清楚否,但是我现在的程序只能够实现从&m=2之后的部分,也就是mine_mean1根本没有被set进去,因为我得完整程序很长,里面涉及的数据集就更多 、更繁琐了,所以没法讲清楚代码。

请您帮我看一哈(呼。。。 写好多。。。)

报纸
zhangzachary 发表于 2012-5-18 13:25:16
sophiesdaisy 发表于 2012-5-18 10:21
我的一小段程序确实容易引起误解,其实我想实现的目标是在我定义宏每次生成新的数据集mine_mean&m 的时候 ...
把你的if then else加上%
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

地板
sophiesdaisy 发表于 2012-5-18 13:43:02
zhangzachary 发表于 2012-5-18 13:25
把你的if then else加上%
==!

太谢谢了,菜鸟一只,自学成才,所以没有养成很好的习惯。。。

7
sophiesdaisy 发表于 2012-5-22 15:25:24
zhangzachary 发表于 2012-5-18 13:25
把你的if then else加上%
大师,你好,我按照您的指点做了,但是报错:文件 WORK.RUN.DATA 不存在

8
zhangzachary 发表于 2012-5-23 10:25:44
sophiesdaisy 发表于 2012-5-22 15:25
大师,你好,我按照您的指点做了,但是报错:文件 WORK.RUN.DATA 不存在
%macro .....;
data ...  ;
%if .. %then %do;
set ... ;
%end;
%else %do;
set ... ;
%end;
run;
%mend;
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 20:51