SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2774|回复: 3
打印 上一主题 下一主题

sas 如何计算概率的一般加法公式

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-6-14 23:58:32 | 只看该作者

sas 如何计算概率的一般加法公式

对于n个事件的加法公式在这个页面上不太好输入,写出
两个事件的概率加法公式 P(AuB)=P(A)+P(B)-P(AB),
现在问题是,有一个变量,它有n个观测值,其中每个观测值都
代表相应事件发生的概率,想求出各事件和的概率,该如何计算呢?
sas中有没有相应的程序呢?请各位帮助,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-6-19 05:46:16 | 只看该作者

Re: sas 如何计算概率的一般加法公式

any event should be indepedent?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-6-19 07:32:40 | 只看该作者

Re: sas 如何计算概率的一般加法公式

assume any p(XY) =P(X)P(Y).
and set all prob names as p1, p2, p3, ...
I propose a code for that:
[code:piriddtc]%macro break;
   %let nL =%sysfunc(countw(&String));
   %let LastW =%scan(&String, &nL);
   %let String =%sysfunc(tranwrd(&String, &LastW,%str() ));
   ((&String) *(1-&LastW) +&LastW)
%mend;

option mprint mlogic symbolgen;
%macro LastW(n =); %global formula;
   %let n1 =%eval(&n -1); %let formula =; %let String=;
   %local i;
   %do i =1 %to &n1;
      %let formula =&formula p&i;
   %end;
   %let formula =(&formula)*(1-p&n) +p&n;
   %do i =1 %to &n;
      %let String =&String p&i;
   %end;
   %do i=1 %to &n1;
      %let formula =%sysfunc(tranwrd(&formula, &String,%break));
   %end ;
%mend LastW;


data _null_;
   array p[100] (100*0.01);
   %LastW(n =2)
   ;
   rr0 =&formula;put rr0=;
   %LastW(n =3)
   ;
   rr0 =&formula;put rr0=;
   %LastW(n =10)
   ;
   rr0 =&formula;put rr0=;

   %LastW(n =100)
   ;
   rr0 =&formula;put rr0=;
run;[/code:piriddtc]
jingju
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-7-24 08:47:54 | 只看该作者

Re: sas 如何计算概率的一般加法公式

[quote="jingju11":1i6ffk5o]assume any p(XY) =P(X)P(Y).
and set all prob names as p1, p2, p3, ...
I propose a code for that:
[code:1i6ffk5o]%macro break;
   %let nL =%sysfunc(countw(&String));
   %let LastW =%scan(&String, &nL);
   %let String =%sysfunc(tranwrd(&String, &LastW,%str() ));
   ((&String) *(1-&LastW) +&LastW)
%mend;

option mprint mlogic symbolgen;
%macro LastW(n =); %global formula;
   %let n1 =%eval(&n -1); %let formula =; %let String=;
   %local i;
   %do i =1 %to &n1;
      %let formula =&formula p&i;
   %end;
   %let formula =(&formula)*(1-p&n) +p&n;
   %do i =1 %to &n;
      %let String =&String p&i;
   %end;
   %do i=1 %to &n1;
      %let formula =%sysfunc(tranwrd(&formula, &String,%break));
   %end ;
%mend LastW;


data _null_;
   array p[100] (100*0.01);
   %LastW(n =2)
   ;
   rr0 =&formula;put rr0=;
   %LastW(n =3)
   ;
   rr0 =&formula;put rr0=;
   %LastW(n =10)
   ;
   rr0 =&formula;put rr0=;

   %LastW(n =100)
   ;
   rr0 =&formula;put rr0=;
run;[/code:1i6ffk5o]
jingju[/quote:1i6ffk5o]

这个程序太强大了,很多地方看不懂。多时能像jingju这样就好了。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-4 00:30 , Processed in 0.068662 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表