楼主: pandayan
2166 11

[原创博文] 怎樣可run一次就可出幾組不同值的數據? [推广有奖]

  • 0关注
  • 0粉丝

高中生

50%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
106 点
帖子
17
精华
0
在线时间
33 小时
注册时间
2010-6-30
最后登录
2010-9-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位高手...我完成就一個程序..
可惜每次只能走到一個數值的數據...
請問各位如何一次run出幾組不同數值的數據呢?

(因程序太長..所以只發一點...望大家見諒..)



data data;  
input yr y;  /*Input the Year and the Variables*/
cards;
1988 55
1989 70
1990 90
run;

%let f=0.7;  /* Input the Value.(0<=F<=.99)*/   <<~~就是想run後出幾種不同的數值...例如同時run到...0.2..0.5..等等...

data addyr;
set data end=end;
output;
if end then do until(yr=2000);  /*Add the End Year.*/
yr+1;  y=.;
output;
end;
run;

data Q1;
set  addyr;
retain ytop 0;
if _n_=1 then ytop=y;
else do;
f=&f;   
ytop=ytop*(1-f)+y;
end;
aaa=0; ybar=0;
do m=1 to _n_;
f=&f;  
aa= (1-f)**(m-1);
aaa=aa+aaa;   
end;
ybar=ytop/aaa;
run;


謝謝大家的幫忙。
二维码

扫码加我 拉你入群

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

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

关键词:Run Variables Variable Input cards 程序 如何

回帖推荐

pandayan 发表于6楼  查看完整内容

5# pobel 我再表達清楚吧...假如我利用 do f=0.2,0.5,0.7; 我要在每一個位置都要輸入數據..很不方便..(即 data q1及 data q3) 所以我想問.....有冇有一個方法是可以只輸入一次數值便能生成答案呢?? 謝謝.. %let f=0.9; /* Input the Value.(0

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2010-8-26 15:14:52 |只看作者 |坛友微信交流群
data Q1;
set  addyr;
retain ytop 0;
do f=0.2,0.5,0.7;
        if _n_=1 then ytop=y;
        else do;
                ytop=ytop*(1-f)+y;
        end;
        aaa=0; ybar=0;
        do m=1 to _n_;
                aa= (1-f)**(m-1);
                aaa=aa+aaa;   
        end;
                ybar=ytop/aaa;
output;
end;

run;
已有 1 人评分学术水平 热心指数 收起 理由
soporaeternus + 1 + 1 很快,很好!!

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

和谐拯救危机

使用道具

藤椅
pandayan 发表于 2010-8-26 15:30:22 |只看作者 |坛友微信交流群
不好意思呢...
我的程序有數十個 data..
我都是用%let 來輸入要走的數值...
請問有方法只輸入一次數值..便能導入至各data內嘛..?
謝謝你..!!!!!

使用道具

板凳
orc徽章 发表于 2010-8-26 15:33:04 |只看作者 |坛友微信交流群
{:3_41:}好多字不认识啊,看来得回去补习了

使用道具

报纸
pobel 在职认证  发表于 2010-8-26 15:35:00 |只看作者 |坛友微信交流群
pandayan 发表于 2010-8-26 15:30
不好意思呢...
我的程序有數十個 data..
我都是用%let 來輸入要走的數值...
請問有方法只輸入一次數值..便能導入至各data內嘛..?
謝謝你..!!!!!
没看明白
和谐拯救危机

使用道具

地板
pandayan 发表于 2010-8-26 15:42:51 |只看作者 |坛友微信交流群
5# pobel

我再表達清楚吧...假如我利用 do f=0.2,0.5,0.7;
我要在每一個位置都要輸入數據..很不方便..(即 data q1及 data q3)
所以我想問.....有冇有一個方法是可以只輸入一次數值便能生成答案呢??
謝謝..


%let f=0.9;  /* Input the Value.(0<=F<=.99)*/


data addyr;
set data end=end;
output;
if end then do until(yr=2005);  /*Add the End Year.*/
yr+1;  y=.;
output;
end;
run;

data Q1;
set  addyr;
retain ytop 0;
if _n_=1 then ytop=y;
else do;
f=&f;   
ytop=ytop*(1-f)+y;
end;
aaa=0; ybar=0;
do m=1 to _n_;
f=&f;  
aa= (1-f)**(m-1);
aaa=aa+aaa;   
end;
ybar=ytop/aaa;
run;

data Q2;
set Q1;
retain  r1 0;   
r1=lag(ybar);
r=ybar/r1;
run;

data Q3;
set  Q2;
retain rtop 0;
if _n_=2 then rtop=r;
else do;
f=&f;   
rtop=(1-f)*rtop+r;
end;
aaa=0; rbar=0;
do m=2 to _n_;
f=&f;  
aa= (1-f)**(m-2);
aaa=aa+aaa;   
end;
rbar=rtop/aaa;
run;

使用道具

7
pobel 在职认证  发表于 2010-8-26 15:54:49 |只看作者 |坛友微信交流群
这样可以么?
%let f=0.9,0.7,0.5,0.2;  /* Input the Value.(0<=F<=.99)*/


data addyr;
set data end=end;
output;
if end then do until(yr=2005);  /*Add the End Year.*/
yr+1;  y=.;
output;
end;
run;

data Q1;
set  addyr;
retain ytop 0;
do f=&f;
                if _n_=1 then ytop=y;
                else do;
                ytop=ytop*(1-f)+y;
                end;
                aaa=0; ybar=0;
                do m=1 to _n_;
                aa= (1-f)**(m-1);
                aaa=aa+aaa;   
                end;
                ybar=ytop/aaa;
                output;
   end;

run;

data Q2;
set Q1;
retain  r1 0;   
r1=lag(ybar);
r=ybar/r1;
run;

data Q3;
set  Q2;
retain rtop 0;
do f=&f;
                if _n_=2 then rtop=r;
                else do;
                rtop=(1-f)*rtop+r;
                end;
                aaa=0; rbar=0;
                do m=2 to _n_;
                aa= (1-f)**(m-2);
                aaa=aa+aaa;   
                end;
                rbar=rtop/aaa;
          output;
        end;

run;
和谐拯救危机

使用道具

8
pandayan 发表于 2010-8-26 16:10:04 |只看作者 |坛友微信交流群
ouput 後很奇怪呢....

Obs     yr      y       py

                                                 1    1988    55       .
                                                 2    1988    55       .
                                                 3    1988    55       .
                                                 4    1988    55       .
                                                 5    1988    55       .
                                                 6    1988    55     55.000
                                                 7    1988    55     55.000
                                                 8    1988    55     55.000
                                                 9    1988    55     55.000
                                                10    1988    55     55.000
                                                11    1988    55     56.269
                                                12    1988    55     61.050
                                                13    1988    55     71.256
                                                14    1988    55     61.105
                                                15    1988    55     54.207
                                                16    1988    55     52.957
                                                17    1989    70     52.926
                                                18    1989    70     91.602
                                                19    1989    70     81.993
                                                20    1989    70     76.664
                                                21    1989    70     67.971
                                                22    1989    70     85.355
                                                23    1989    70     71.893
                                                24    1989    70     64.635
                                                25    1989    70     51.817
                                                26    1989    70     93.004
                                                27    1989    70     80.829
                                                28    1989    70     72.166
                                                29    1989    70     53.681
                                                30    1989    70    116.059
                                                31    1989    70    101.177
                                                32    1989    70     89.738
                                                33    1990    90     62.833
                                                34    1990    90    114.748
                                                35    1990    90     97.656
                                                36    1990    90     85.835
                                                37    1990    90     57.208
                                                38    1990    90     91.882
                                                39    1990    90     77.647
                                                40    1990    90     68.010
                                                41    1990    90     43.636
                                                42    1990    90     93.079


還有很多...

使用道具

9
soporaeternus 发表于 2010-8-26 16:15:07 |只看作者 |坛友微信交流群
为什么会没有变量f?
Let them be hard, but never unjust

使用道具

10
pobel 在职认证  发表于 2010-8-26 16:21:16 |只看作者 |坛友微信交流群
8# pandayan
对于数据集中的每一行,根据每一个f的值会输出一条记录。
如原数据集中有n行,如有5个不同的f值,则会输出n*5行记录。

另外,ytop变量在计算中会被不断修改而使结果错误,需要变一下retain的变量名:

retain temp 0;

  if _n_=1 then temp=y;
  else do;
  ytop=temp*(1-f)+y;


Hope this helps!
和谐拯救危机

使用道具

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

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

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

GMT+8, 2024-4-30 23:44