楼主: yukiooy
2430 8

[原创博文] 对于“我对SAS编程语言的一点看法,欢迎拍砖。”帖子的一点解释 [推广有奖]

  • 3关注
  • 5粉丝

院士

0%

还不是VIP/贵宾

-

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

+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 编程语言 心里话 上下文 标示 程序

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

使用道具

藤椅
warrenzhang 发表于 2010-5-7 16:59:15 |只看作者 |坛友微信交流群
1.首先是声明变量的问题。一般的编程语言,都是“先声明,后使用”,在这里,var height weight;竟然存在于最后,给人一种不伦不类的感觉,
var height weight在这里可不是申明变量啊。楼主请先研究proc means的语法吧。
已有 1 人评分热心指数 收起 理由
yukiooy + 1 多谢提醒,我应该是受其它编程语言影响太多了

总评分: 热心指数 + 1   查看全部评分

使用道具

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

使用道具

报纸
sxlion 发表于 2010-5-8 13:15:10 |只看作者 |坛友微信交流群
编程不是学SAS的主要目的,是前提。

使用道具

地板
sxlion 发表于 2010-5-8 13:15:37 |只看作者 |坛友微信交流群
编程不是学SAS的主要目的,是前提。
要是编程都学不会,就不要玩SAS了。

使用道具

7
chouxiangdaishu 发表于 2010-5-11 22:24:11 |只看作者 |坛友微信交流群
别把生命浪费在SAS上。

使用道具

8
gzjb 发表于 2010-5-13 22:50:08 |只看作者 |坛友微信交流群
SAS --Statistical analysis system.


It is mainly used for statistical analysis

Not a coding language.

使用道具

9
andy162639 发表于 2010-5-13 23:36:57 |只看作者 |坛友微信交流群
gzjb 发表于 2010-5-13 22:50
SAS --Statistical analysis system.


It is mainly used for statistical analysis

Not a coding language.
对的,如果把大量时间浪费在语言上,而没有坚实的统计和所应用方向的专业背景,走不远的。这也就是为什么当程序员容易,统计师难的原因。
有人说,统计归根结底就是个P

使用道具

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

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

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

GMT+8, 2024-4-25 19:44