楼主: wx2123
941 8

[实际应用] SAS和R里面IF和DO的问题 [推广有奖]

  • 1关注
  • 2粉丝

硕士生

67%

还不是VIP/贵宾

-

威望
0
论坛币
5650 个
通用积分
221.8077
学术水平
1 点
热心指数
5 点
信用等级
0 点
经验
3111 点
帖子
93
精华
0
在线时间
188 小时
注册时间
2015-9-10
最后登录
2024-2-20

楼主
wx2123 在职认证  发表于 2021-12-19 11:52:42 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

有一段SAS程序,需要用R实现。问题主要是关于IF和DO循环。



下面SAS程序里,%macro abc的if不能用R 的if statement(if只对比第一行)。所以我考虑用ifelse。这样就解决了t和f的对比问题。


可是后面的Do循环该怎么办呢?特别是那个r[t - i]。我考虑用R里面的apply()系列函数,但也没想好怎么办。


也许还有更好的办法,欢迎指教。


  1. data One;
  2. input  t f u s ;
  3. cards;
  4. 0  1  10000 5
  5. 5  2  20000 6
  6. 2  1  30000 7
  7. 3  2  40000 8
  8. 0  4  50000 9
  9. 7  6  60000 3
  10. 2  2  70000 2                                      
  11. ;
  12. run;

  13. %macro abc;
  14.     sum = 0;
  15.     if t - f >=0 then do;
  16.         Do i=0 to (f-1);
  17.            sum = sum + max(0, r[t - i]);  /* 主要是这句怎么写*/
  18.         end;
  19.     end;
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:SAS和R statement Statemen Statem sas程序

沙发
wx2123 在职认证  发表于 2021-12-19 12:16:30 |只看作者 |坛友微信交流群
上面代码只显示了一部分,这里是全部代码。

data One;
        input  t f u s ;
        cards;
1  1  10 15                                                                                                               
5  3  20 66                                                                                                         
2  1  30 77                                                                                                            
3  2  40 8                                                                                                              
0  4  50 9
7  7  60 7
2  2  70 2                                                                                                                  
;
run;

%macro abc;
        sum = 0;
        if t - f >=0 then do;
                Do i = 0 to (f-1);
                        sum = sum + max(0  , r[t - i]); /* 主要是这句怎么写*/
                end;
                put '------------------';
                end;

        else do; /* else这里不重要*/
                Do i=1 to t;
                        sum = sum + 222;
                end;
                sum = sum + 88;
        end;
        drop i;
%mend;

data Two;
        set One;
        array r{0:7} _temporary_;
        r[t] = s;
        %abc;
run;

使用道具

藤椅
橙红的果士 学生认证  发表于 2021-12-22 08:56:16 |只看作者 |坛友微信交流群
max(0  , r[t - i])这一句你主要的目的是什么?

使用道具

板凳
wx2123 在职认证  发表于 2021-12-22 11:13:20 |只看作者 |坛友微信交流群
橙红的果士 发表于 2021-12-22 08:56
max(0  , r[t - i])这一句你主要的目的是什么?
感谢回复。我的意思就是0和r[t-i]比大小。由于这里是sample data,所以没有负数。

不过这个max不是主要问题,关键是怎么写r[t-i]。这个我还没有想出来。

使用道具

报纸
橙红的果士 学生认证  发表于 2021-12-22 18:44:38 |只看作者 |坛友微信交流群
array r{0:7} _temporary_;
r[t] = s;
我想问问你,r[t] = s;这行代码是实现了什么功能呢?

使用道具

地板
wx2123 在职认证  发表于 2021-12-22 23:27:13 |只看作者 |坛友微信交流群
橙红的果士 发表于 2021-12-22 18:44
array r{0:7} _temporary_;
r[t] = s;
我想问问你,r[t] = s;这行代码是实现了什么功能呢?
r[t] = s就是把s赋值给r[t].我加了一行代码 rr= r[t];
  1. data Two;
  2.         set One;
  3.         array r{0:7} _temporary_;
  4.         r[t] = s;
  5.         rr= r[t];
  6.         %abc;
  7. run;
复制代码
然后rr和s的值是一样的。

使用道具

7
wx2123 在职认证  发表于 2021-12-29 12:30:12 |只看作者 |坛友微信交流群
欸,看来只能自立更生了

使用道具

8
nightmeal 发表于 2021-12-29 16:02:51 |只看作者 |坛友微信交流群
在宏开放代码环境中,使用%if %then %do调用,循环也是一样

使用道具

9
wx2123 在职认证  发表于 2021-12-30 00:15:46 |只看作者 |坛友微信交流群
nightmeal 发表于 2021-12-29 16:02
在宏开放代码环境中,使用%if %then %do调用,循环也是一样
你说的是SAS么?

使用道具

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

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

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

GMT+8, 2024-4-29 01:36