SAS学习笔记(3):Referencing Files and Setting Options

 未分类  SAS学习笔记(3):Referencing Files and Setting Options已关闭评论
11月 301999
 

以前的东西:

SAS OnlineTutor®: Basic and Intermediate SAS®的learning path见《SAS学习笔记:开篇》

SAS学习笔记(1):Basic Concepts

SAS学习笔记(2):Using the Programming Workspace 

—————————————————

General form, basic LIBNAME statement: LIBNAME libref  SAS-data-library‘; 

The LIBNAME statement is global, which means that the librefs remain in effect until you modify them, cancel them, or end your SAS session.Therefore, the LIBNAME statement assigns the libref for the current SAS session only. Each time you begin a SAS session, you must assign a libref to each permanent SAS data library that contains files that you want to access in that session. (Remember that Work is the default libref for a temporary SAS data library.)When you end your SAS session or delete a libref, SAS no longer has access to the files in the library. However, the contents of the library still exist on your operating system.

Remember that you can also assign a library from the SAS Explorer using the New Library window (as you did if you completed the lesson Basic Concepts ). Libraries that are created with the New Library window can be automatically assigned at startup by selecting Enable at Startup.

General form, basic PROC CONTENTS step: PROC CONTENTS DATA=SAS-file-specification NODS;RUN; 

PROC CONTENTS and PROC DATASETS overlap in terms of functionality. Generally, these two function the same:

  • the CONTENTS procedure
  • the CONTENTS statement in the DATASETS procedure.

PROC CONTENTS <options>;RUN;

PROC DATASETS <options>;CONTENTS <options>;QUIT;

The major difference between the CONTENTS procedure and the CONTENTS statement in PROC DATASETS is the default for libref in the DATA= option. For PROC CONTENTS, the default is either Work or User. For the CONTENTS statement, the default is the libref of the procedure input library. Notice also that PROC DATASETS is an interactive procedure that requires a QUIT statement rather than a RUN statement.  

y default, PROC CONTENTS and PROC DATASETS list variables alphabetically. To list variable names in the order of their logical position (or creation order) in the data set, you can specify the VARNUM option in PROC CONTENTS or in the CONTENTS statement in PROC DATASETS.

If you use two-digit year values in your data lines, external files, or programming statements, you should consider another important system option, the YEARCUTOFF= option. This option specifies which 100-year span is used to interpret two-digit year values.

100-year span

All versions of SAS represent dates correctly from 1582 A.D. to 20,000 A.D. (Leap years, century, and fourth-century adjustments are made automatically. Leap seconds are ignored, and SAS does not adjust for Daylight Savings Time.) However, you should be aware of the YEARCUTOFF= value to ensure that you are properly interpreting two-digit years in data lines.

As with other system options, you specify the YEARCUTOFF= option in the OPTIONS statement:

     options yearcutoff=1925;

When a two-digit year value is read, SAS interprets it based on a 100-year span which starts with the YEARCUTOFF= value. The default value of YEARCUTOFF= is 1920.

Default 100-year span 

However, you can override the default and change the value of YEARCUTOFF=  to the first year of another 100-year span. For example, if you specify YEARCUTOFF=1950, then the 100-year span will be from 1950 to 2049.

     options yearcutoff=1950;

Using YEARCUTOFF=1950, dates are interpreted as shown below:

Modified 100-year span

Remember, the value of the YEARCUTOFF= system option affects only two-digit year values. A date value that contains a four-digit year value will be interpreted correctly even if it does not fall within the 100-year span set by the YEARCUTOFF= system option.

General form, FIRSTOBS= and OBS= options in an OPTIONS statement:

FIRSTOBS=n

OBS=n

where n is a positive integer. For FIRSTOBS=, n specifies the number of the first observation to process. For OBS=, n specifies the number of the last observation to process. By default, FIRSTOBS=1. The default value for OBS= is MAX, which is the largest signed, four-byte integer that is representable in your operating environment.

Technorati Tags: ,

数学娱乐:男女不均衡及希尔伯特的旅馆

 胡说  数学娱乐:男女不均衡及希尔伯特的旅馆已关闭评论
11月 301999
 

好些日子没能更新这个博客,转一个我生活博客里的好玩东西,关于“男女不均衡和希尔伯特的旅馆”:

********************************************************************

看一个大龄相亲的报道。不均衡的几千万男性同胞,是祖国和人民的一大关注热点。有好事者提议,比如,现在的30岁男,俯视下一代,找个20岁女,到下一辈的30岁男,如法炮制,也找20岁女下手,如果循环往复,神州大地就不存在男女比例不平衡的问题了。咋一听,还以为到了希尔伯特的旅馆。

说,有个人去投宿,但那家旅馆已经满员了,意思是,比如,这家旅馆有很多层,每层就一个房间,每个房间都住了一位客人,是为满员。但旅馆老板有办法,让这个投宿的客人安心入住。首先,他就把这个客人安排在第一层,把原先住在第一层的客人安排到第二层,把原先在第二层的客人安排在第三层,就这么一直挪过去。记住,刚才我们说这家旅馆有很多层,很多的意思是,你总有办法把客人一层一层往上挪,这样,那位原先以为住不到店的客人也就能安排好了。这家旅馆就叫做“希尔伯特的旅馆”,希尔伯特是一个数学家的名字。

理解希尔伯特的旅馆,可以举个例子,比如,有两个无穷可数的数列,一是自然数列,二是偶数数列。无穷是说,这个自然数列从1、2、3、4、5、6、7、8、……等等一直持续下去,这个偶数数列2、4、6、8、…… 也是一直持续下去,可数是说,虽然上面两个数列是无穷的,但是你有兴致,却可以掰着手指头一二三四地跟着数下去。不可数的,比如在数轴上分布得密密麻麻的实数数列,一会是1.1,一会是1.111111111111111111111111111111111111,就叫人没法跟着数了。

扯远了,还是刚才两个无穷数列

A:  1、2、3、4、5、6、7、8、……

B:  2、4、6、8、……

如果有像A数列展示一样多的旅客,而只有B数列一样多的房间,看着似乎就有一半的人住不了店了(每个房间只能住一个人)。——如果你真的这么想,就要想想上面的希尔伯特旅馆,看看如何有办法让A数列多的人住进B数列多的房间:

A:  1、2、3、4、5、6、7、8、……

B:  2、4、6、8、10、12、14、16……

方案是这样的,想像一下客人全部以自然数列编号,房间都是偶数号,就让编号为1的客人住在B中编号为2的房间,客人2住4号房间,客人3住6号房间,这么一个个数过去,所有的客人都能住上店了。上面的事实有一个惊人的结论,即A数列和B数列,在某种计数下,竟然是一一对应的。一一对应,自然每个客人就都有自己的房间了。说“某种计数”,是按上面的匹配程序走,不是我们一般说的个数。

扯更远了,希尔伯特的旅馆是没问题的。接下来我是想驳斥上面说的循环往复解决男女不平衡问题,那纯粹是扯淡,跟希尔伯特的旅馆,只是有些似是而非的联系。我要睡了(我已发现此命题的一个真正奇妙的证明,但是这页边空白太小,写不下这个证明。……)

SAS学习笔记(4):Editing and Debugging SAS Programs

 未分类  SAS学习笔记(4):Editing and Debugging SAS Programs已关闭评论
11月 301999
 

以前的东西:

SAS OnlineTutor®: Basic and Intermediate SAS®的learning path见《SAS学习笔记:开篇》

SAS学习笔记(1):Basic Concepts

SAS学习笔记(2):Using the Programming Workspace

SAS学习笔记(3):Referencing Files and Setting Options

————————————————–

General form, basic INCLUDE command: INCLUDE ‘file-specification’

where file-specification is the physical name by which the host system recognizes the file.

Because this is a command (not a SAS statement), no semicolon is used at the end.

SAS Program Structure

  • begin DATA and PROC steps in column one
  • indent statements within a step
  • begin RUN statements in column one
  • include a RUN statement after every DATA step or PROC step.

Error Types

So far, the programs that you’ve submitted in this lesson have been error-free, but programming errors do occur. SAS can detect several types of errors. The most common are

  • syntax errors that occur when program statements do not conform to the rules of the SAS language
  • data errors that occur when some data values are not appropriate for the SAS statements that are specified in a program.
Technorati Tags: ,

在UltraEdit中运行SAS代码-配置图解

 未分类  在UltraEdit中运行SAS代码-配置图解已关闭评论
11月 301999
 

在UltraEdit(UE)中编辑SAS代码是很方便的,尤其是同时查看很多不同的脚本时(关于在UE中实现SAS代码高亮显示,见文末)。以前有一篇《在UltraEdit中配置Java编译器》,现在说说如何在UltraEdit(UE)中配置SAS,不完全是玩具功能,偶尔有用。我的测试环境是:

UltraEdit Professional Version 14.00a+1

SAS 9.1.3 Service Pack 4

Microsoft Windows  XP Professional Version 2002, Service Pack 2

Intel(R) Core(TM)2 Duo CPU, 1.95GB of RAM

1.UE->Advanced->Tool Configuration->Insert

打开UE,依上面的顺序点击工具栏,你将看到类似下面的Command、Options和Output界面,先在Command栏目,Menu Item Name一栏,写上SAS或者其他能提醒自己的词,在Working Directory一栏填上%p。困难在于Command Line一栏,下面详述之。

Command

 

2.Start->All Programs->SAS->SAS 9.1(English)->Properties

Command Line一栏涉及如何激活你的SAS系统。在你的机器里,依上点“开始”->“所有程序”等,你将看到如下对窗口:

Target

我们需要的Target(目标)一栏的字符串,我机器的SAS系统装在D盘,所以这一行是这样的:

D:\SAS9\sas.exe -CONFIG D:\SAS9\nls\1d\SASV9.CFG

把以上Target栏中的东西复制到上面提到的Command Line中,后面再加上这么些SAS系统选项(后面再解释):

-noicon -nosplash -batch -sysin %n

所以,最后Command Line一栏看上去是这样的(注意:如果你的SAS系统装在其他路径,Target项目会有所不同):

D:\SAS9\sas.exe -CONFIG D:\SAS9\nls\1d\SASV9.CFG  -noicon -nosplash -batch -sysin %n

3.Options

在Options栏目里,勾上Windows Program和Save all files first。

Options

4.Output

在Output栏目里,勾上Output to List Box、Capture Output以及Captured Output。

Output

按OK结束。在UE->Advanced的最下面,你将看到新建成功的SAS项目。大功告成哈尔莫斯。

/*以上参考Batch Submission Using Ultraedit,里面UE和SAS的版本都很旧。*/

 

随便在SAS Help找一段不是特简单的代码,比如下面的,把它们复制到UE,并保存为比如ultraedit.sas,路径在,比如D:\Ultreedit-SAS\,接下来所有的结果都会保存在这个路径下,而且在UE中点File->Open,也会直接到达这个所谓当前文件夹:

data Setosa;

        input SepalLength SepalWidth PetalLength PetalWidth @@;

        label sepallength=’Sepal Length in mm.’

              sepalwidth=’Sepal Width in mm.’

              petallength=’Petal Length in mm.’

              petalwidth=’Petal Width in mm.’;

        datalines;

      50 33 14 02  46 34 14 03  46 36 .  02

      51 33 17 05  55 35 13 02  48 31 16 02

      52 34 14 02  49 36 14 01  44 32 13 02

      50 35 16 06  44 30 13 02  47 32 16 02

      48 30 14 03  51 38 16 02  48 34 19 02

      50 30 16 02  50 32 12 02  43 30 11 .

      58 40 12 02  51 38 19 04  49 30 14 02

      51 35 14 02  50 34 16 04  46 32 14 02

      57 44 15 04  50 36 14 02  54 34 15 04

      52 41 15 .   55 42 14 02  49 31 15 02

      54 39 17 04  50 34 15 02  44 29 14 02

      47 32 13 02  46 31 15 02  51 34 15 02

      50 35 13 03  49 31 15 01  54 37 15 02

      54 39 13 04  51 35 14 03  48 34 16 02

      48 30 14 01  45 23 13 03  57 38 17 03

      51 38 15 03  54 34 17 02  51 37 15 04

      52 35 15 02  53 37 15 02

      ;

   ods html;

   ods graphics on;

   title ‘Fisher (1936) Iris Setosa Data’;

   proc corr data=Setosa sscp cov plots;

      var  sepallength sepalwidth;

      with petallength petalwidth;

   run;

   ods graphics off;

   ods html close;

就在这段代码上,点Advanced->SAS 运行,稍等你就能在D:\Ultreedit-SAS看到所有的结果:

Result

其中,

ultraedit.sas是我们测试的代码,在UE里编辑和运行;

ultraedit.log 是这次任务的日志文件,可以用UE打开;

ultraedit.lst 是list output,可以用UE打开,依次见下:

LogList

sashtml.htm 是html output,可以用默认的浏览器打开;

RecMatrixPlot0.gif是上面程序产生的散点图图片。

HtmlOutput Figure I9LsM7DJP0ccdmrxb5WKZoXny30csgZaL1IF7j42WcWTUVD18xIwpdYfNH52eMCGp?PARTNER=WRITER" border="0" height="259" width="367" />

————————–附录———————————

5.如果以上都没问题,那么我们就可以参详一下在以上设置中碰到的SAS系统选项:

sysin-specifies to start the SAS System and submit the file in batch mode

noicon-specifies to restore the main SAS window immediately

nosplash-specifies to not display the logo screen when the SAS System initiates

6.关于UE里SAS代码高亮显示,见http://idmcomp.com/index.php?name=Content&pa=showpage&pid=40

提升指数、提升表和提升图

 金融计算  提升指数、提升表和提升图已关闭评论
11月 301999
 

——————–

这篇去年在我的生活博客出现过,题目叫《贴一篇读书报告:Lift,Lift Table, and Lift Chart》。不想年代久远,里面的一个表格不知道怎么没有了,现挪到自己这个(所谓)技术博客,除了补全,也算是回到正确的地方了。从本机文档中直接COPY过来,删掉一些废话。

——————–

Lift, Lift Table, and Lift Chart

提升指数、提升表和提升图(草稿)

胡江堂,北京大学软件与微电子学院

2006-11-5

 

1. 什么是Lift?

I) Lift(提升指数)是评估一个预测模型是否有效的一个度量;这个比值由运用和不运用这个模型所得来的结果计算而来。

II) 一个简单的数字例子:

i. 比如说你要向选定的1000人邮寄调查问卷。以往的经验告诉你大概20%的人会把填好的问卷寄回给你,即1000人中有200人会对你的问卷作出回应(response),用统计学的术语,我们说baseline response rate是20%;

ii. 如果你现在就邮寄问卷,1000份你期望能收回200份,这可能达不到一次问卷调查所要求的回收率,比如说工作手册规定邮寄问卷回收率要在25%以上;

iii. 通过以前的问卷调查,你收集了关于问卷采访对象的相关资料,比如说年龄、教育程度之类。利用这些数据,你确定了哪类被访问者对问卷反应积极。假设你已经利用这些过去的数据建立了模型,这个模型把这1000人分了类,现在你可以从你的千人名单中挑选出反应最积极的100人来,这10%的人的反应率(response rate)为60%。那么,对这100人的群体(我们称之为Top 10%),通过运用我们的模型,相对的提升(gain or lift value)就为60%/20%=3;换句话说,与不运用模型而随机选择相比,运用模型而挑选有3倍的好处;

iv. 类似地,对占总样本的任何比例的人群,我们都可以计算出相应的提升指数,比如说我们可以计算Top 20%的群体的提升指数。

III) 一个结论就是,提升指数越大,模型的运行效果越好。

 

2. 建立Lift Table 的步骤(并画出Lift Chart),以验证信用评分模型为例:

I) 利用已经建立的评分模型,对我们要验证的样本进行评分。样本下的每一个个体都将得到一个分数,或者是违约概率,或者是一个分值;

II) 对样本按照上面计算好的分数进行降序排序;

III) 把已经排好序的样本依次分成10个数量相同的群体,我们就建立了一个叫decile的变量,它依次取10个值,1、2、3、4、5、6、7、8、9、10,diclie1包括违约概率值最高的10%的个体,diclie2包括下一个10%的群体,以此类推;

IV) 帐户总数是每个decile下的样本数,它是整个样本数的10%;

V) 边际坏账数是每个decile内违约的人数,就是说,利用我们的评分模型,在decile1,有25个人违约,以此类推;

VI) 累计坏账数,45表明前两个decile内共有45个人违约,以此类推;

VII) 边际坏账率是每个decile内坏账的比率。对decile1,边际坏账率由25/100得来;

VIII) 对每一个加总的decile,都计算一个累计坏账率,比如说,对前两个decile,也就是整个样本的20%,累计坏账率等于(25+20)/(100+100);

IX) 在每个decile里,提升指数(Lift)就是相应的累计坏账率与平均坏账率的偏离程度,计算公式是(累计坏账率-平均坏账率)/平均坏账率,习惯上还会乘上一个100。

X) 注:在一些处理中,提升指数直接由每个decile的累计坏账率除以平均坏账率得来,它们之间就相差1,一个是相对偏离,一个是绝对偏离。

XI) 就我们考察的信用评分模型,它的目的就是尽可能把人群区别来开来,比如说“好”的顾客、 “坏”的顾客。提升指数越大,表明模型运作效果越好。

表1:Lift Table

clip_image002

(注:该表内数字纯粹为了演示,没有任何实际背景)

 

图1:Lift Chart

clip_image004

3. 参考资料

I) Bruce Ratner, Decile Analysis Primer: Cum Lift for Response Model.

http://www.dmstat1.com/res/DecileAnalysisPrimer.html

II) Howard J. Hamilton. Cumulative Gains and Lift Charts

http://www2.cs.uregina.ca/~hamilton/courses/831/notes/lift_chart/lift_chart.html

III) David S. Coppock. Data Modeling and Mining: Why Lift?

http://www.dmreview.com/article_sub.cfm?articleId=5329

IV) Lift Chart. See Thomas Hill, Paul Lewicki. Statistics: Methods and Applications.

http://www.statsoft.com/textbook/glosl.html

V) 冯慧,“信用卡业务与系统”,北京大学软件与微电子学院,2006年秋季学期,课堂笔记

SAS Perl Regular Expression and SAS Regular Expressions (2)

 未分类  SAS Perl Regular Expression and SAS Regular Expressions (2)已关闭评论
11月 301999
 

可以先参考先前介绍正则表达式的元字符的那篇。

SAS对正则表达式 (Regular Expressions, RX) 的支持,表现在以下两大类函数(包括Call Routines)中:

  1. SAS Perl Regular Expressions (PRX),SAS9开始引进,有10个函数;
  2. SAS Regular Expressions (RX) ,SAS6.12就开始支持,5个函数。

这两个正则表达式系统功能类似,只是语法略有差别。它们的对应如下:

  SAS Perl Regular Expressions SAS Regular Expressions
版本 SAS9– SAS6.12–
函数前缀 PRX RX
定义正则表达式的函数 PRXParse RXParse
定位函数 PRXMatch RXMatch
  Call PRXSubstr Call RXSubstr
  Call PRXPosn  
  Call PRXNext  
  PRXParen  
文本替换函数 PRXChange  
  Call PRXChange Call RXChange
释放内存函数 Call PRXFree Call RXFree
代码调试函数 Call PRXDebug  

在RX系统中,比如,用$d或$D来表示数字0-9,在PRX中,用\d,\D却表示所有不是数字的字符。同时学习两套系统很容易弄混。建议只使用SAS PRX。

  1. PRX提供了更丰富的函数;
  2. PRX更为人所知;
  3. PRX据说更有效率。

(待续……)

概率、信息和熵

 机器学习与数据挖掘  概率、信息和熵已关闭评论
11月 301999
 

以前写过一篇关于最大熵模型的读书笔记。刚翻陈家鼎和郑忠国两位老师合编的教材《概率与统计》(北大出版社,2007),看到关于信息熵的详细数学表述,不妨转述一下,算是不在场的课堂笔记。

概率与信息

事件A的概率P(A)是A发生可能性的大小的度量。

问题:A的发生带给我们多大的信息呢?

结论

P(A)越大,则A发生带来的信息越少;反之,P(A)越小,则A的发生带来的信息越大。

例子

有人对你说“某日巴西足球队战胜了中国队”,你觉得他没有给你多少信息,因为这件事发生的概率非常大,结果几乎在预料当中。但如果他说巴西负于某个亚洲队,你会感觉得到的信息不少。

猜想

  1. 事件A发生所带来的信息量H(A)应该是它发生的概率P(A)的严格减函数,而且A是必然事件时H(A)=0(“巴西队战胜中国队”)。
  2. 若事件A与事件B相互独立,则A与B都发生带来的信息量应该是H(A)与H(B)之和,即H(AB)=H(A)+H(B)。

引理1—H(u)=-clnu

设H(u)是(0,1]上的严格减函数,H(1)=0,则为了满足H(uv)=H(u)+H(v),对一切0<u,v<1,必须且只需存在c>0,使得H(u)=-clnu,写得更清楚些是—c*ln(u)。

(这里c是一个正的常数,它的大小涉及信息量的单位。为简单起见,一般取c=1)

定义1—信息量的表示

设事件A的概率是P(A),P(A)>0,则称H(A)=-lnP(A)为A带来的信息量。

定义2—完备事件组的熵

设A1到An(n>=2)是条件S下的完备事件组,P(Ai)>0,对i=1,…n,则称P(A1…An)=-sumP(Ai)lnP(Ai),为完备事件组A1…An的熵。

定理1—事件有相等的概率时结果的不确定性最大

设A1到An(n>=2)是完备事件组,则当且仅当P(A1)=…P(An)时熵最大。

即,若条件S下可能发生的互不相容的事件至少有两个,则当且仅当这些事件有相等的概率时结果的不确定性最大。

Technorati Tags: , , , , ,

Hull书上的一个小例子

 金融计算  Hull书上的一个小例子已关闭评论
11月 301999
 

进来闲些,就想把手头正看着的Hull那册options, futures, and other derivatives (6th ed.)中的模型和例子都拿SAS写一遍。先拿ch4: Interest Rate中的一个小东西练手(p.78 Table 4.1),说复利的计算次数对利息的影响。以下,

/*************************

A:本金

m: 复利计算的次数

n: 年数

R: 年利率

FV: 终值

*************************/

options nodate nonotes nosource;
%macro rate(A=,m=,n=,R=);
data _null_;
    format FV 6.2;
    FV=&A*(1+&R/&m)**(&m*&n);
    %put _user_;
    put FV=;
run;
%mend rate;
proc printto log="D:\rate.dat" new;
%rate(A=100,m=1,n=1,R=0.1)
%rate(A=100,m=2,n=1,R=0.1)
%rate(A=100,m=4,n=1,R=0.1)
%rate(A=100,m=12,n=1,R=0.1)
%rate(A=100,m=52,n=1,R=0.1)
%rate(A=100,m=365,n=1,R=0.1)
proc printto;
run;
data rate;
    infile "D:\rate.dat";
    length m 3.;
input #1 m & 8-10
        #2 n 8
        #3 A 8-10
        #4 R 8-10
        #5 FV 4-9;
if _error_=0 then output;
run;
proc print data=rate;
run;

以上为适应书上的例子,很多地方写死(hard coding)了。最后的结果跟书上一样,不过以上展示了更多,由各种复利计算次数求出相应的利息,然后从日志文件读出结果再展示:

Obs      m    n     A      R       FV

1       1    1    100    0.1    110.00
2       2    1    100    0.1    110.25
3       4    1    100    0.1    110.38
4      12    1    100    0.1    110.47
5      52    1    100    0.1    110.51
6     365    1    100    0.1    110.52

Ryszard Michalski

 人物  Ryszard Michalski已关闭评论
11月 301999
 

刚从kdnuggets看到的消息,机器学习/数据挖掘领域的领军人物之一,美国乔治马森大学(George Mason University ,GMU)教授,Ryszard S. Michalski(中译名迈克尔斯基),于2007年9月20号死于癌症,享年70岁。

ME/OBIT-MICHALSKI 看到这个消息有些触动,是因为手头就有他与人合著的《机器学习与数据挖掘:方法和应用》(Machine Learning and Data Mining Methods an Applications, John Wiley & Sons Ltd.,1998。朱明等译,北京:电子工业出版社,2004,“数据仓库与数据挖掘技术应用丛书”)。这本书的计算机气息比较浓。学校图书馆还有他编的《机器学习:实现人工智能的途径》(王树林等译,北京:科学出版社,1992),英文名叫Machine learning : an artificial intelligence approach(Berlin : Springer, 1984)。

Michalski生于波兰,在波兰和俄罗斯接受大学与博士教育,1970年定居美国。

在Visual C++ 2008配置QuantLib

 金融计算  在Visual C++ 2008配置QuantLib已关闭评论
11月 301999
 

稍微了解了下quantlib。它是一个开源的C++库,在数量金融社区(quant)里名气最大。 这些日子在学习C++和金融计算的活计,正好有用。今在机器里配置了一个quantlib的环境,配置boost时参考了quantnet论坛的一个帖子(Boost 1.35.0 + Quantlib 0.9.0 with Visual Studio 2008),记录先:

QuantLib-0.9.6

boost_1_35_0

Microsoft Visual C++ 2008 Express Edition

Microsoft Windows  XP Professional Version 2002, Service Pack 2

Intel(R) Core(TM)2 Duo CPU, 1.95GB of RAM

 

1. 去微软主页下载并安装Microsoft Visual C++ 2008 Express Edition

2-1.去sourceforge下载boost_1_35_0.zip,并解压到C盘。最后,新出现C:\boost_1_35_0

2-2.打开一个Command Prompt(Ctrl+R->cmd),把盘符指向C:\boost_1_35_0\tools\jam\src,运行build.bat,这将产生以下要用的bjam.exe

2-3. 把盘符指向C:\boost_1_35_0,运行以下命令

tools\jam\src\bin.ntx86\bjam.exe --build-type=complete
这将花n多时间。没有计时,我是先忙活其他的事,一个小时后看到运行成功。
2-4.接着运行以下命令:
tools\jam\src\bin.ntx86\bjam.exe --build-type=complete install
这又将花掉大概n的一半的时间。成功后,你将看到一个新的文件夹C:\Boost
3.去sourceforge下载QuantLib-0.9.6.zip,并解压到C盘。最后,新出现C:\QuantLib-0.9.6
4-1. 打开Microsoft Visual C++ 2008 Express Edition ->Tools->Options->Projects and Solutions->
VC++ Directories->Show directories for:->Include files,新添一行C:\Boost\include\boost-1_35
include 
 同样,在Library files中新添一行C:\Boost\lib
lib 
4-2. 打开VC2008->File->Open->Project/Solution,打开C:\QuantLib-0.9.6\QuantLib_vc9.sln,导入QuantLib后,你就将看到,
clip_image002
5-1. 选中上图中的QuantLib,右键选中Set As Startup Project,然后右键选中build,……漫长等待……直到成功。
(注:在build的过程中,老冒出一行警告:
The file contains a character that cannot be represented in the 
current code page (936).Save the file in Unicode format to prevent data loss
大概跟我机器的local有关,后来证明对功能没有影响。)
5-2. 重复以上动作(先Set As Startup Project再build),对其余的项目如BermudanSwaption等做同样的操作,
build成功后,可以按Ctrl+F5查看程序运行结果。That's all and have fun!