全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1426 8
2021-12-19

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



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


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


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


复制代码


二维码

扫码加我 拉你入群

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

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

全部回复
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])这一句你主要的目的是什么?
二维码

扫码加我 拉你入群

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

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

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;这行代码是实现了什么功能呢?
二维码

扫码加我 拉你入群

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

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

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];
复制代码
然后rr和s的值是一样的。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群