请选择 进入手机版 | 继续访问电脑版
楼主: yukiooy
25693 37

我对SAS编程语言的一点看法,欢迎拍砖。 [推广有奖]

  • 3关注
  • 5粉丝

院士

0%

还不是VIP/贵宾

-

威望
0
论坛币
14152 个
通用积分
73.3600
学术水平
17 点
热心指数
27 点
信用等级
9 点
经验
760 点
帖子
1394
精华
0
在线时间
1235 小时
注册时间
2008-12-22
最后登录
2023-8-11

yukiooy 发表于 2010-5-6 19:53:51 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
这里是我的一点看法,欢迎拍砖。
经过几个月艰苦的学习,现在也会写一些小程序了。不过,说心里话,写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之类的关键词,但是编辑窗口可否再智能一些?不要只是在我写下关键词之后才要么变成粗体,要么变成红色,这一变化的存在确实必要,但是当我写对关键词之后再给我变成粗体,总有一种“事后的诸葛亮”的感觉。能否存在关键词补全的这样一种功能?
二维码

扫码加我 拉你入群

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

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

关键词:SAS编程 编程语言 McDonald Weight Donald 欢迎 SAS 语言 看法 拍砖

回帖推荐

soporaeternus 发表于4楼  查看完整内容

1 SAS不是一个开发工具,和C#或是java没有可比性。它只是一个应用软件而已。 2 SAS的核心技术是proc步,是它的模块们。而绝非它招牌的data步、畸形的proc sql、神来之笔或是无奈之举的MACRO、已经日暮西山的AF和SCL。data步和proc sql只是起到对数据的管理(这个也逐渐被数据库工具蚕食,数据库+SAS的架构现在貌似很主流)、加工(同前,数据库也能搞定。效率,可移植性都不可同日而语),现在看起来,这些更像是SAS对其他输入数据的一 ...
已有 3 人评分经验 论坛币 学术水平 热心指数 收起 理由
李会超 + 100 精彩帖子
crackman + 100 + 100 + 1 好的意见建议
soporaeternus + 1 好提议.....

总评分: 经验 + 200  论坛币 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

本帖被以下文库推荐

sushe1527 发表于 2010-5-6 20:27:16 |显示全部楼层 |坛友微信交流群
如果不是专门写SAS程序的人来看SAS程序,根本看不出到底这两块有什么逻辑关系。
--------------------------------------
我读着怎么那么别扭呢,要说,不是专门写c++的人也肯定不知道c++怎么编译的吧?

使用道具

yatming 发表于 2010-5-6 20:45:00 |显示全部楼层 |坛友微信交流群
1# yukiooy
两种不同语言之间是不存在可读性的比较,所谓的可读性是对同一语言不同的编写风格从理解,耦合度来评价的性质,其也并不是必须追求,有时候过于精巧、效率很高的算法反而很难读懂,所以不论可读性,如果对所用的语言不熟悉,不能很好理解器其内部机理,无论对待SAS还是C或者JAVA,那必然是很难去理解的。
其次说SAS,SAS用来做开发的主要还是base和macro,proc不用说更多的是应用。当然有些proc靠开发会多一点,比如sql。
开发理念更多是“自顶向下”的opp方向,而不是oop,当然AF另当别论。正是由于是opp,因此SAS代码的扩展性有所缺陷,对已有的程式进行修改,往往会大费周章,这不比cpp或java,后两者因有类的概念,再加上封装和多态与重用,可以开发扩展性很好的代码。
其差异本身也是由于SAS并不以development为重,也不以此为核心竞争力的缘由。
学一门开发语言,个人认为,理解主要的框架,并需要深刻知道其内部编译和运行上机理,则能从开发上慢慢起步了。但SAS更多的还是应用,是一种工具,说到底也是由底层语言开发而成,应用层采用code方式使其更具备灵活性,非开发的应用能力好坏则并不体现在coding上了。
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
jingju11 + 5 + 5 + 5 精彩帖子
yukiooy + 1 + 1 能说出这样的话,觉得你是一个写了很多年程序的大牛......特别是有关程序的论述
soporaeternus + 1 opp一出,SAS哭

总评分: 学术水平 + 6  热心指数 + 7  信用等级 + 5   查看全部评分

使用道具

1 SAS不是一个开发工具,和C#或是java没有可比性。它只是一个应用软件而已。
2 SAS的核心技术是proc步,是它的模块们。而绝非它招牌的data步、畸形的proc sql、神来之笔或是无奈之举的MACRO、已经日暮西山的AF和SCL。data步和proc sql只是起到对数据的管理(这个也逐渐被数据库工具蚕食,数据库+SAS的架构现在貌似很主流)、加工(同前,数据库也能搞定。效率,可移植性都不可同日而语),现在看起来,这些更像是SAS对其他输入数据的一个过渡,一个妥协。
3 另一方面,由于各个领域都有大牛、巨牛的存在,SAS的code几十年来被折腾出了无数超级牛B、很牛B或是一般牛B的玩法(蛮多是SAS自己的技术人员为了卖产品灵光乍现或是含辛茹苦出来的,毕竟客户花了大价钱买SAS,希望SAS多干点事情)。“原来SAS还可以这么做!!”不断被提起,重复,再提起,再重复。这样或多或少会提高“不明真相”的用户对SAS的期望,SAS被神化,真的很多原来做开发杀进来搞SAS的“开发”,除了对统计知识的“头大异常”,就是抱怨SAS code的种种弱智,前者好歹可以理解成一个黑箱,一个函数,一个封装了的算法,而后者则只能舍近求远,入乡随俗了。
4 SAS的BASE模块就是苦力的干活,是SAS的鸡肋。STAT以及等等模块才是SAS的精髓。
最后是一个不是很恰当的比喻,WOW也有自己的“开发语言”(能这样称呼吗?反正可以写来定制界面,数据搜集、开发些小玩意,做插件之类的等等),对于物品和技能的使用也有类似于MACRO的概念(当年的自然迅捷+大加血 ^_^)。但是这些都无法掩盖WOW本身的光辉,我想SAS就是如此......
已有 5 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
jingju11 + 5 + 5 + 5 精彩帖子
yatming + 1 精彩帖子
yukiooy + 1 + 1 + 1 精彩
醉_清风 + 1 + 1 + 1 经验分享
crackman + 100 + 100 + 1 + 1 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 8  热心指数 + 9  信用等级 + 7   查看全部评分

Let them be hard, but never unjust

使用道具

crackman 发表于 2010-5-6 22:40:13 |显示全部楼层 |坛友微信交流群
4# soporaeternus
SAS的核心其实就是STAT,他最初是靠这个起家,也是最核心的模块,不然也不会被FDA认定为唯一的临床新药统计分析结果
至于说SAS编程语言,很难理解,和常规的编程语言差别有点大,可读性不强,刚才楼上两位说的很清楚,当你熟悉之后就知道其实可读性是相对的
在这边其实我们都存在一个误区
是不是SAS编程会了,就什么问题都可以解决了?
我觉得soporaeternus说的很对,SAS其实包括数据处理模块,数据管理,数据分析,数据展现等几大类,一般编程厉害其实就是数据处理很不错,能够根据需要处理原始数据集,几千万条,甚至几十亿条数据,大家想一想,为什么要处理原始数据集,就是给数据洗澡,目的就是为了后续的统计分析服务的,让数据集的形式更好的进行统计分析。
数据处理现在很多软件都可以做,做的很好,但是不是每个软件的统计分析统计算法做的最好,他们在统计方法的研究上估计无法和SAS抗衡。另外SAS编程其实不难学,只要你肯学,想学,你学6个月我想你绝对学得会,因为语法很简单,在所有编程语言我估计SAS语言算是简单的了,所以我个人觉得要是想在SAS编程上有一个飞跃,建议学好STAT。
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
jingju11 + 5 + 5 + 5 精彩帖子
yukiooy + 1 + 1 + 1 多谢“我个人觉得要是想在SAS编程上有一个飞跃,建议学好STAT。”

总评分: 学术水平 + 6  热心指数 + 6  信用等级 + 6   查看全部评分

使用道具

yatming 发表于 2010-5-6 22:42:51 |显示全部楼层 |坛友微信交流群
soporaeternus 发表于 2010-5-6 21:46
...真的很多原来做开发杀进来搞SAS的“开发”,除了对统计知识的“头大异常”,就是抱怨SAS code的种种弱智,前者好歹可以理解成一个黑箱,一个函数,一个封装了的算法,而后者则只能舍近求远,入乡随俗了......
好像在说我哈。小量数据做清洗,转换,data step还是挺顺手的,毕竟原本就是面对样本的处理,也不用考虑效率什么。一个好的工具就该用在刀刃上,扬长避短么。

使用道具

yatming 发表于 2010-5-6 22:42
soporaeternus 发表于 2010-5-6 21:46
...真的很多原来做开发杀进来搞SAS的“开发”,除了对统计知识的“头大异常”,就是抱怨SAS code的种种弱智,前者好歹可以理解成一个黑箱,一个函数,一个封装了的算法,而后者则只能舍近求远,入乡随俗了......
好像在说我哈。小量数据做清洗,转换,data step还是挺顺手的,毕竟原本就是面对样本的处理,也不用考虑效率什么。一个好的工具就该用在刀刃上,扬长避短么。
彼此彼此,没有办法的事
只能说国内某些行业的分析刚刚起步,有世界上最好的硬件和软件,但是很多东西还必须从零开始。探索中的浪费是必须的。
Let them be hard, but never unjust

使用道具

醉_清风 发表于 2010-5-7 09:15:38 |显示全部楼层 |坛友微信交流群
使用SAS一年有余 心中也有很多感慨和想法 但觉沉淀不够
还是继续学习  进来纯属观摩和学习
从来不需要想起 永远也不会忘记

使用道具

yukiooy 发表于 2010-5-7 10:52:10 |显示全部楼层 |坛友微信交流群
sushe1527 发表于 2010-5-6 20:27
如果不是专门写SAS程序的人来看SAS程序,根本看不出到底这两块有什么逻辑关系。
--------------------------------------
我读着怎么那么别扭呢,要说,不是专门写c++的人也肯定不知道c++怎么编译的吧?
呵呵,不好意思,我没有表达清楚。
首先编译和写/看代码是两回事,不会写SAS程序的人还真有可能会编译SAS程序呢。
这里所说的“联系”是指,数据步与程序步之间的联系,以及这两步内在的联系。这些联系在程序的文字上很难看得出。这里我举个例子:
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之类的关键词,但是编辑窗口可否再智能一些?不要只是在我写下关键词之后才要么变成粗体,要么变成红色,这一变化的存在确实必要,但是当我写对关键词之后再给我变成粗体,总有一种“事后的诸葛亮”的感觉。能否存在关键词补全的这样一种功能?

使用道具

yatming 发表于 2010-5-7 11:26:59 |显示全部楼层 |坛友微信交流群
以一个自己熟悉的语言来评判别的语言,是否有些苛刻,这岂不是先入为主,假设先学的是SAS,那再来学cpp,又是否会认为oop的思想简直就是畸形。程序设计需要在设计技术问题上考虑,更需要考虑其应用的主流方向。任何的评价都需要站在全面的立场上,就像如果片面来考虑灵活性,比之APL(C++,JAVA),script的无编译,无类约束,应用广泛,是否就可认为其更加优秀。其实每种语言都有其优劣势,也正因为其优劣势,所以就需要把其发挥在更擅长的领域上,扬长避短。就好比处理文本强劲的perl,又有多少人会用perl来开发UI。
而程序设计来看,SAS尤其自己最独特的容器——dataset,任何的程序也都是基于此为基础。语言的好坏不能用其他领域叱咤风云的语言来比较考量,其没有任何意义,而应是否在应用领域能否更好服务大众,所以拿来和SAS比较的更多是SPSS,STATA,R。就不论SAS,如果在没有学过ABAP情况下,去看其代码,简直更认为是无法理解的。
SAS的编辑器确实比较低端,不过外界已经有为SAS自主开发了更先进的IDE,如果楼主有兴趣,大可搜罗一番。
已有 2 人评分学术水平 热心指数 收起 理由
yukiooy + 1 + 1 多谢意见
soporaeternus + 1 精彩帖子

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

使用道具

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

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

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

GMT+8, 2024-3-28 22:40