全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2777 8
2010-05-07
本来在那个帖子中已经写好了解释,但是不知道为什么在那一个帖子中没有显示出来。给那些精彩的回复加分,当点击“加分”的时候可以看到加分,但是在旁边没有我加分的标示。
原文如下:
============================================================================================
这里是我的一点看法,欢迎拍砖。
经过几个月艰苦的学习,现在也会写一些小程序了。不过,说心里话,写SAS程序,累死我了。
SAS语言的上下文可读性不强。我认为,SAS作为一门编程语言,这是不是很出彩的一块。SAS编程一般分两大部分,一是数据部分,二是程序部分。load数据之后,接着就是proc,如果不是专门写SAS程序的人来看SAS程序,根本看不出到底这两块有什么逻辑关系。至少是从文字上看不出的。这和一般的编程语言,比如C/C++,Java等等比起来,可读性差了很多。
以上仅是我个人的想法,有不对的地方欢迎矫正。
如果你有更好的学习这门编程语言的方法,务必分享一下吖。
================================================================================
这里所说的“逻辑关系”是指,数据步与程序步之间的联系,以及这两步内在的联系。这些联系在程序的文字上很难看得出。这里我举个例子:
data li1;
input id $ name $ height weight@@;
cards;
1 tom 187 75
2 cendy 169 57
3 mcdonald 189 85
;
run;
proc means data=li1;
var height weight;
run;
在这里我们考察这段比较典型的SAS程序内在的联系。
先考察数据步:
1.首先是分号的问题,SAS语句,除了数据块之外,其它的地方句子的末尾都要加上分号;,如果有其它语言的编程经验,会存在很多的误解。以为“这件事情到此就结束了”。比如,你看到data li1;,这句后面存在分号,就会认为data li1与后面的句子没有联系了。事实上,一直到run,都是有联系的。这是有其它语言的编程经验所不能理解的。
2.在数据步中 data li1,在这里,一个有编程经验的人很怀疑data 是不是一种数据类型。如果是数据类型,应该是针对一个数据的有机构成单位来说的。如果说这是一个集合类型,但是,无论是拿出一个记录还是记录中数据的个体,这些都是允许重复的,所以,data也不能看作一种集合。由于存在着存取指令等等一些其它的东西,更不能把data看作是一种数据类型,至少不是封装的很好的数据类型。
3.数据步中存在run,程序步中也有run,一个程序体内存在两个run,这让人觉得很奇怪,就像程序运行了两次一样。如果有C/C++编程经验,这很容易看成一个C/C++程序存在着两个要执行的return语句一样。
4.
input id $ name $ height weight@@;
cards;
1 tom 187 75
2 cendy 169 57
3 mcdonald 189 85
;
这一句,中间有一个cards,就是因为这一cards,让人经常觉得input id $ name $ height weight@@;与下面的那些数据没有任何联系。

再考察程序步:
proc means data=li1;
var height weight;
run;
1.首先是声明变量的问题。一般的编程语言,都是“先声明,后使用”,在这里,var height weight;竟然存在于最后,给人一种不伦不类的感觉,并且,如果没有写SAS程序的经验,你也不会知道height weight与数据之间有什么关系,特别是你写的数据步很长,后面接了很多的语句才写下数据步的run,更是让你丈二的和尚摸不着头脑了。
2.proc means data=li1,这一句话,在数据步中,存在着 data li1,这里又写上 data=li1,不是很了解的人就会问,这到底算是声明还是赋值?同一种语言中,如果存在关键词为data,并且data li1与data=li1都成立,这是编程语言设计的大忌。因为这会产生语义混乱。
一些题外话:
SAS的程序编辑窗口比较弱智。当然,存在的关键词也就是那些统计模块外加一些不痛不痒的data proc之类的关键词,但是编辑窗口可否再智能一些?不要只是在我写下关键词之后才要么变成粗体,要么变成红色,这一变化的存在确实必要,但是当我写对关键词之后再给我变成粗体,总有一种“事后的诸葛亮”的感觉。能否存在关键词补全的这样一种功能?
二维码

扫码加我 拉你入群

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

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

全部回复
2010-5-7 16:45:44
其实楼主的问题
我觉得很有意思
不知道你用MS VS2008没有
微软的IDE,智能感知系统非常不错
SAS现在为止还没有实现智能感知,在增强型编辑器里面只是对关键词进行了颜色标记
不过我个人的认为现在SPSS18(PASW)都实现了智能感知,估计SAS后期的版本肯定会实现,这样将大大增强编程效率,减少错误率
其实如果楼主有心研究,你可以去系统参数里面去设置一些缩写,一些颜色设置字体设置,都可以实现的
至于你觉得SAS的编程风格和其他编程风格不一样,让你觉得很不好理解,那只能说你的编程灵活性,思维的变换以及快速学习的能力有可以提升的空间。
二维码

扫码加我 拉你入群

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

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

2010-5-7 16:59:15
1.首先是声明变量的问题。一般的编程语言,都是“先声明,后使用”,在这里,var height weight;竟然存在于最后,给人一种不伦不类的感觉,
var height weight在这里可不是申明变量啊。楼主请先研究proc means的语法吧。
二维码

扫码加我 拉你入群

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

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

2010-5-8 11:48:07
crackman 发表于 2010-5-7 16:45
其实楼主的问题
我觉得很有意思
不知道你用MS VS2008没有
微软的IDE,智能感知系统非常不错
SAS现在为止还没有实现智能感知,在增强型编辑器里面只是对关键词进行了颜色标记
不过我个人的认为现在SPSS18(PASW)都实现了智能感知,估计SAS后期的版本肯定会实现,这样将大大增强编程效率,减少错误率
其实如果楼主有心研究,你可以去系统参数里面去设置一些缩写,一些颜色设置字体设置,都可以实现的
至于你觉得SAS的编程风格和其他编程风格不一样,让你觉得很不好理解,那只能说你的编程灵活性,思维的变换以及快速学习的能力有可以提升的空间。
嗯,现在已经用上了VS 2010了。呵呵。智能感应系统比VS2008还要好。我还得加强SAS的学习,多谢
二维码

扫码加我 拉你入群

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

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

2010-5-8 13:15:10
编程不是学SAS的主要目的,是前提。
二维码

扫码加我 拉你入群

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

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

2010-5-8 13:15:37
编程不是学SAS的主要目的,是前提。
要是编程都学不会,就不要玩SAS了。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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