答客问:SAS对列求和

 未分类  答客问:SAS对列求和已关闭评论
11月 301999
 

SAS Base自带的累加函数SUM,虽然有漂亮的缩写方式如SUM(of x1-x100000),但几乎没有什么应用价值(除了在数组array下),因为SUM函数是对行求和,而在通常的二维表中,我们经常需要对列求和。这个问题用proc SQL过程最为方便,还有一个简单的替代方案就是在proc print步下使用SUM选项。比如,对count求和:

data a;
    input ID sex $ count;
cards;
1 M 3
2 F 4
3 M 5
4 F 5
;
proc print data=a;
    sum count;
run;

结果显示:

Obs    ID    sex    count

 1      1     M        3
 2      2     F        4
 3      3     M        5
 4      4     F        5
                    =====
                      17

如果想按sex分组显示,则先对sex排序:

proc sort data=a;
    by sex;
run;
proc print data=a;
    sum count;
    by sex;
run;

结果显示:

——————————————— sex=F ———————————————–

                                         Obs    ID    count

                                           1     2      4
                                           2     4      5
                                         —          —–
                                         sex            9

———————————————- sex=M ———————————————–

                                         Obs    ID    count

                                           3     1       3
                                           4     3       5
                                         —          —–
                                         sex             8
                                                      =====
                                                        17

当然,你可以让结果更紧凑些,比如在proc print中的by sex下面再加一个id sex,看起来就是这样:

sex    ID    count

 F      2       4
        4       5
—          —–
 F              9

 M      1       3
        3       5
—          —–
 M              8
             =====
               17

Technorati Tags: , ,

SAS/IML,及其与R/S-Plus、SciLab/Matlab的比较(1)

 未分类  SAS/IML,及其与R/S-Plus、SciLab/Matlab的比较(1)已关闭评论
11月 301999
 

SAS的矩阵语言IML(Interactive Matrix Language)只可以处理二维表,数据类型不如R、Matlab等同类矩阵语言丰富,不过它对矩阵的表达和操纵能力一样厉害,而且与SAS程序和数据的相互访问通讯比较好,不妨一学。矩阵语言,看着也类似,下面就做个IML与R/S-Plus、SciLab/Matlab的比较(我手头只有R跟SciLab,以下的例子就用它们,这两个东西我不熟,不妨随时指正。)一句话,SAS/IML在定义矩阵时跟SciLab/Matlab差不多,在提取矩阵元素时跟R/S-Plus相近些:

1.定义矩阵

定义矩阵 SAS/IML R/S-Plus SciLab/Matlab
标量 a={1} 或者a=1 a=1 a={1}

重复a={2 2 2}

a={[3] 2 }

a=rep(2,3)

 
循环,1到100 a=1:100   a=1:100
循环,1到100,步长为2 a=do(1,100,2)  

a=1:2:100

1*3行向量 a={1 2 3} a=array(c(1,2,3),dim=c(1,3)) a=[1 2 3]

3*1列向量

a={1,2,3}

a=array(c(1,2,3),dim=c(3,1))

a=[1;2;3] or a={1;2;3}

2*3矩阵

b={1 2 3, 4 5 6 }

a=array(c(1,2,3,4,5,6),dim=c(2,3))

b=[1 2 3; 4 5 6 ]

3*3单位阵

c=I(3)

 

a=eye(3,3)

2*3零矩阵 

d=J(2,3,0)

 

zeros(2,3)

2*3全一矩阵

e=J(2,3,1) or J(2,3)

 

a=ones(2,3)

2.矩阵操纵

矩阵操纵 SAS/IML R/S-Plus SciLab/Matlab

2行3列,

b=a[2,3]

b=a[2,3]

b=a(2,3)

所有行

a[2,]

a[2,]

b=a(2,:)

所有列

a[,3]

a[,3]

b=a(:,3)

均值

b=a[:]

 

b=a(:) 所有元素

水平叠加(列相加) a||b cbind(a,b) c=[a,b]
垂直叠加(行相加) a//b rbind(a,b)  
取最大 a<>b pmax(a,b)  
取最小 a><b pmin(a,b)  

3.矩阵运算

矩阵运算 SAS/IML R/S-Plus SciLab/Matlab

求逆

inv(a)

inv(a)

inv(a)

行列式 det(a)   det(a)
rank(a)   rank(a)
trace(a)   trace(a)

元素相乘 

a#b

a*b

a.*b

元素幂 

a##b

a^b

a.^b

a**2=a*a

 

a^2=a*a

矩阵乘法

a*b

a%*%b

 

转置

t(a) or a`

t(a)

a’

对角阵 

diag(a)

diag(a)

 

对角元素

vecdiag(a)

diag(a)

 
Kronecker乘积 a@b   kron(m1,m2)
特征值
特征向量
eigval(a)
eigvec(a)
 

[eigenvector, eigenvalue]=eig(m)

matlab

常见数据挖掘错误:识别和纠正(译稿)

 机器学习与数据挖掘  常见数据挖掘错误:识别和纠正(译稿)已关闭评论
11月 301999
 

与ttnn的几个朋友一起翻译的一篇稿子,是SAS公司Doug Wielenga在今年SAS全球论坛的一篇会议论文,Identifying and Overcoming Common Data Mining Mistakes.翻译这篇文章得到了SAS公司与作者本人的许可,并许诺不做于商业用途。

你可以自由散发这个译本,并保证不用做商业用途,引用时请注明“《ttnn BI 观点》集体翻译”。有任何问题可以与译者联系,联系信息在文档的末尾。

翻译这篇文字的过程,见《常见数据挖掘错误:识别和纠正》翻译告捷!》;

译稿下载,在http://groups.google.com/group/ttnn/web/kuihuabaodian.pdf

原稿,在http://www.iapa.org.au/Environments/edoras/Resources/IAPA/SAS%20Global%20Forum%200732007.pdf.

附,这篇文章的结构如下:

Abstract
Introduction

1.          Preparing The Data

1.1           Failing To Consider Enough Variables

1.2           Incorrectly Preparing Or Failing To Prepare Categorical Predictors

1.2.1      Too Many Overall Levels

1.2.2      Levels That Rarely Occur

1.2.3      One Level That Almost Always Occurs

1.3           Incorrectly Preparing Or Failing To Prepare Continuous Predictors

1.3.1      Extremely Skewed Predictors

1.3.2      A Spike And A Distribution

1.3.3      One Level That Almost Always Occurs

1.3.4      Ignoring Or Misusing Time-Dependent Information

2            Defining Roles, Performing Sampling, And Defining Target Profiles

2.1           Inappropriate Metadata

2.2           Inadequate Or Excessive Input Data

2.3           Inappropriate Or Missing Target Profile For Categorical Target

2.4           Target Variable Event Levels Occurring In Different Proportions

2.5           Differences In Misclassification Costs

3            Partitioning The Data

3.1           Misunderstanding The Roles Of The Partitioned Data Sets

3.2           Failing To Consider Changing The Default Partition

4            Choosing The Variables

4.1           Failing To Evaluate The Variables Before Selection

4.2           Using Only One Selection Method

4.3           Misunderstanding Or Ignoring Variable Selection Options

4.3.1      Choosing Settings In The ??2 Mode

4.3.2      Choosing Settings In The R2 Mode

5            Replacing Missing Data

5.1           Failing To Evaluate Imputation Method

5.2           Overlooking Missing Value Indicators

6            Fitting Linear Regression Models

6.1           Overusing Stepwise Regression

6.2           Inaccurately Interpreting The Results

7            Fitting Decision Tree Models

7.1           Ignoring Tree Instability

7.2           Ignoring Tree Limitations

8            Fitting Neural Network Models

8.1           Failing To Do Variable Selection

8.2           Failing To Consider Neural Networks

9            Comparing Fitted Models

9.1           Misinterpreting Lift

9.2           Choosing The Wrong Assessment Statistic

10        Scoring New Data

10.1        Generating Inefficient Score Code

10.2        Ignoring The Model Performance

11        Clustering Your Data

11.1        Building One Cluster Solution

11.2        Including (Many) Categorical Variables

12        Performing Association And Sequence Analysis

12.1        Failing To Sort The Data Set

12.2        Failing To Manage The Number Of Outcomes

Conclusion

References

Acknowledgments

Contact Information

数量金融基本书目(Classic Books for Quantitative Finance Available in China)

 金融计算  数量金融基本书目(Classic Books for Quantitative Finance Available in China)已关闭评论
11月 301999
 

一些有志于数量金融的朋友感叹国内资源不足,花大量时间泡网找电子书。其实这个领域的基本参考书就那么几本,全世界的学者都在用。据我多年泡图书馆和逛书店的经验,不妨给大伙数数国内公开出版的数量金融经典教材,影印版或者中译本,挂一漏万,欢迎随时添加指正(mailto:jiangtanghu(at)gmail(dot)com)。这些书应该都可以从网上书店如china-pub订到,而且单本不会超过一百块。说,材料都容易得到,稀缺的是钻研的耐心。

数量金融的基本书目,无非包括三类,金融、数学和编程(C++)。在金融这块,入门多用John Hull的那本所谓华尔街圣经,Options, Futures, and Other Derivatives(《期权、期货和其他衍生品》),现在都出到第七版了(可怜我手头那本6版还没有看完)。清华大学出版社有这本书的影印版(见过5版,不知道有没有更新的),中译本就比较落后,华夏出版社有3版——那就看影印5版喽。Hull还有一本《期货与期权市场导论》 (第5版),北大出版社的中译本(这个本子较新),数学处理上比前面的“圣经”简单,但对了解领域知识一样有用。

金融数学这块,最好的书国内都引进了(除了Paul Wilmott on Quantitative Finance,北大图书馆跟国图有藏,最新2版三卷本):

Steven Shreve的两卷Stochastic Calculus for Finance,卷一The Binomial Asset Pricing Model和卷二Continuous-Time Models,世界图书出版公司都有影印本,叫做《金融随机分析》。世界图书还有他另外两本名气稍小的影印本子,Methods of Mathematical Finance(《金融数学方法》)和Brownian Motion and Stochastic Calculus(《布朗运动和随机计算》)。都是Springer的精装黄皮本子,比较精致,还便宜。

Salih Neftci的几本,武大出版社也有影印本,不过都是平装的本子,纸张看着不舒服,Principles of Financial Engineering(《金融工程原理》),以及An Introduction to the Mathematics of Financial Derivatives(《金融衍生工具数学导论》)。最后一本西南财经大学出版社也有影印本,叫做《金融衍生工具中的数学》。今年西南财经也引进了几本看着不错的书。

Baxter和Rennie合著的Financial Calculus: An Introduction to Derivative Pricing (Cambridge) ,图灵图书在人民邮电出版社有影印本和中译本,唤作《金融数学—衍生产品定价引论》。图灵做的书都比较漂亮。

最基本的金融数学(随机微积分)参考书,以上已经足够了。其他数学科目,如偏微分、数值分析之类,在数学系的书目里,能选择的就更多了。国内甚至还能找到Paul Glasserman的那本Monte Carlo Methods in Financial Engineering(《金融工程中的蒙特卡罗方法》),高教出版社刚出了一个影印版。

最后一组是编程。一些朋友还在犹豫,是用C好呢,还是Java好?或者,Excel VBA、Matlab似乎也不赖,最近C#也好像挺流行,Python也出了个数值计算的库,R也有金融计算的包rMetrics,S-Plus的FinMetrics看着也不错,——都错!如果你不是学有余力精力过剩的话,C++应该是你唯一的选择。C++是数量金融界的标准语言,而且,即使你工作中不用C++,它也会是企业检验你水平的门槛。C++,全世界的程序员和Quant推荐得最多的就是这三本书,而且国内都有最新的影印本和中译本:Lippman的C++ Primer(人民邮电)、Eckel的Thinking in C++(机械工业)和Bjarne Stroustrup的The C++ Programming Language(《C++程序设计语言》,高教)。

BNF标记法:简介

 Computers and Internet  BNF标记法:简介已关闭评论
11月 301999
 
Backus-Naur Form,巴克斯-诺尔形式

你经常看到类似下面的语法说明:

PROC FREQ < options > ;
BY variables ;
EXACT statistic-options < / computation-options > ;
OUTPUT < OUT=SAS-data-set > options ;
TABLES requests < / options > ;
TEST options ;
WEIGHT variable < / option > ;

这些类似的标记就称作Fackus-Naur Form,简称BNF,是John Backus和Peter Naur为每一种编程语言设计的语法规则标记符号。 这套标记法非常复杂,一般掌握下面的一个超级简化版本就可以了:

 

符号 含义
<> 包含术语,必选项
| 分隔可选项(互斥OR)
[] 可选项
{} 指出至少需要一个必须项
,… 指出可以可选地被重复多次的项目

 

Technorati Tags: , ,

信用评分书目

 未分类  信用评分书目已关闭评论
11月 301999
 
           
        Credit Scoring: Reading List
 
好久不更新,先整理下手头信用评分方面的书。
 
1. Credit Risk Scorecards: Developing and Implementing
Intelligent Credit Scoring, by N.Siddiqi, 2005
这书主要讲是信用评分模型开发的流程,技术方面是点到为止,对了解建模的生命周期非常有好处,作者是SAS公司的信用评分专家。研一时MasterCard的冯老师给我们开信用评分课,从学校图书馆(PKU)借出,印了一册,时常翻着。当时据此书写了不少读书笔记,又有把这书翻译过来的念头。

2. Credit Scoring and Its
Applications, by L.Thomas, etc, 2002
各种(数据挖掘/机器学习)模型的数学展开,恰到好处,还不至于让人望而却步。有中译本(《信用评分及其应用》,中国金融出版社),原版书在数学系(PKU)的图书室。这书稍嫌旧,经典嘛。
3. Development of Credit Scoring Applications Using SAS Enterprise
Miner, by SAS Institute Inc., 2008
信用评分教程,step-by-step,用的是SAS 的数据挖掘工具Enterprise Miner及SAS Credit
Scoring节点。
4. Data Mining Cookbook: Modeling Data for Marketing, Risk and
Customer Relationship management, by O. Rud, 2000
这书在国内也比较有名,它提供了Logistic回归建立以及评估信用评分模型的SAS代码,但国内还没见着随书的数据集。有中译本(《数据挖掘实践》,机械工业出版社)。

5. 信用评分模型技术与应用,by陈建,2005
中文书,对了解业务背景有帮助。作者陈建在Fair Isaac做模型。


6. 现代信用卡管理,by陈建,2005
同上,信用卡业务知识。

金融随机过程:备忘录

 金融计算  金融随机过程:备忘录已关闭评论
11月 301999
 

All the stochastic calculus you need to know and no more…

如果有兴趣,你当然可以把Neftci(2000)从头到尾读下来,对金融数学要求的随机微积分了解个通透。这本书会从导数的定义开始,一直讲到我们需要的Itō积分、鞅还有PDE,它是Wilmott(2006)还有Hull(2006)都推荐的书(Wilmott看着就是追随这本)。当然,Hull的相关章节(加上附录)也是我们初步了解随机微积分的极好途径,其他的书大都藏头藏尾,遮遮掩掩。有本中文书,台湾陈松男(2002),不回避大多数学问题,读着也是痛快淋漓,而且提供了大多数教科书不曾见到的数学细节。以下这个读书笔记,参照的就是Hull和陈松男(下面当然不好显示数学符号,你可以在我的Google Page找到下文详细的pdf版本,一个叫FinancialStochasticCalculus.pdf    的文件):

  1. 马尔科夫过程(Markov Stochastic Process)
  2. 维纳过程(Wiener Process)
  3. Delta(z)的概率分布性质
  4. 把时段的长度放大至T
  5. 一般化的维纳过程
  6. 伊藤过程(Itō Process)
  7. 伊藤引理(Itō’s Lemma)
  8. 伊藤引理(Itō’s Lemma)的扩展
  9. 股票价格的变动过程
  10. 伊藤引理应用于股价的变动过程

参考文献

  1. Paul Wilmott. Paul Wilmott on Quantitative Finance (Volume One, 2nd Ed.).John Wiley &Sons, 2006
  2. Salih N. Neftci. An Introduction to the Mathematics of Financial Derivatives (2nd Ed., 2000). 武汉大学出版社影印版,2007
  3. John C. Hull. Options, Futures and Other Derivatives (6th Ed.). Prentice Hall, 2006
  4. 陈松男《金融工程学——金融商品创新选择权理论》,复旦大学出版社,2002

SAS的编程元素(OOP和其他)

 未分类  SAS的编程元素(OOP和其他)已关闭评论
11月 301999
 
/*《SAS的编程元素(OOP和其他)》,转自我在quanthr.com的帖子。*/
 
有朋友提到,quant社区中,SAS与Matlab哪个更为流行。做数学模型,Matlab更好,做统计,SAS占优,在社区里,Matlab当然较SAS流行,但是建模一块,C++通吃,这似乎没有什么疑问,所以埋头学C++是王道。这里我多讲些SAS,个人偏好,它诸多的编程元素也让人爱不释手。

SAS是一个庞大的系统,可以说几乎什么活都能做,除了传统优势(统计、时间序列、数据挖掘、商务智能)外,SAS在编程方面让人称道的还有,

–它是一门过程式的语言(循环、分支、数组,……),其中不乏面对对象的特性(详见下)

–另外,对C/C++程序员来说,它提供了一个SAS/C
Complier

–对Java程序员,它有一个基于Eclipse的开发环境SAS
AppDev Studio
,可以方便地利用SAS的计算引擎开发各种应用,

–矩阵运算一块,SAS的矩阵语言IML与Matlab、R等相比也不弱

–字符处理,除了大量的字符函数,SAS也支持Perl正则表达式

–支持标准SQL语句

–支持Hash表

–为XML数据提供了XML引擎

–……

又,关于SAS系统的OO特性。首先,SAS/AF就是一门完全面对对象的应用开发语言。其他的,在SAS/Base中,

–通过Data Step Component
Interface
,你可以在数据步里建立纯OOP的Java对象

–在DDS中,有一个类似的DDS Data Step
Object

–最后,在Macro中,一样可以体现出以上提到的各种OO特性,节日快乐。(注:那天是中秋节。)

SAS程序员必备的十大技巧

 未分类  SAS程序员必备的十大技巧已关闭评论
11月 301999
 

SUGI27(2002)有一篇被广泛引用的文章,就两页纸,Doug Zirbel的10 Things Experienced SAS® Programmers Don’t Know – But Should(“SAS程序员不知道但必须知道的10件事”),题目挺拉风,讲的是对有经验的SAS程序员的一次非正式调查,要他们列出SAS程序员需要的一些技巧。其实一共列出了22条,当然前10条是最重要的:

  1. Macros—basic knowledge of macro language——对SAS宏语言的基本了解。这里作者推荐的主打文档当然是SAS Manuals中的SAS Macro language,以及SAS Guide to Macro Processing,然后还有Little SAS Book和Carpenter’s Complete Guide to the SAS Macro Language
  2. Data Step—basic knowledge of data step——对SAS数据步的基本了解,参见一篇SUGI21的文章,Thomas Miron的The Secret Lift of the Data Step
  3. Data file manipulation—INFILE, UPDATE, SET intricacies etc ——数据文件操作语句,如infile、update、set等
  4. ODS——SAS输出传送系统(Output Delivery System)
  5. Efficiency——编程效率
  6. Data Step Vector—How it works——理解数据步的运行原理,参见2
  7. Macros—Knowing how to write macros that write SAS programs——如何写宏语句
  8. System Development Life Cycle process——这里讲软件开发流程了,作者甚至列出了Steve McConnell的代码大全(Code Complete),在程序员中流传甚广。
  9. SAS Help—How to get it——利用SAS的联机帮助文档
  10. Proc Report——程序步,设计报表
  11. SQL Dictionary tables—basic of retrieving SAS metadata— 用SQL语句管理数据词典(原数据,metadata),可以参见Frank C. DiIorio 和Nancy J. Michal的Data about Data: An Introduction to Dictionary Tables
  12. Proc Summary/Means——程序步,汇总和均值
  13. Debugging Techniques-DEBUG facility and other techniques——程序调试
  14. Proc SQL——SQL语句
  15. Structured programming concepts——结构化编程
  16. Proc Format——格式输入语句
  17. Relational Database Design——数据库设计
  18. Web technology—HTML, JavaScript, SAS IntrNet, ect——网络技术,一些脚本语言
  19. Your Operating System native (and other) languages—REXX, Unix scripts, VBScript, syncsort——跟操作系统相关的一些脚本语句
  20. Proc Transpose——数据转置
  21. Data step reports—"Data _null_" report writing——
  22. SCL—SCL Functions usable in e.g.,Base SAS data steps——屏幕控制语句

上面10,或者22条,要强调的都是,SAS Base是一个好的SAS程序员需要掌握的几乎所有的东西。

Technorati Tags: