SAS 程序冷知识——proc import中遇到的那些bug

SAS 程序冷知识——proc import中遇到的那些bug,第1张

当我们用proc import导入一个excel文档的时候,经常会出现这样的情况:

这是因为excel的sheet名字过长导致的(有时候DM老是把sheet名字弄的老长,还后面缀这日期,搞得每次更新文件都先改程序)。

这种情况下最简单的处理就是手动修改excel的sheet名字,但是一般作为正式项目,作为外部数据的excel是不好随便改的。

既然不能改文件就只能改程序了,这里提供一个新的方法:

这两段程序到底哪里有不同呢?最主要的是dbms=的值不同,前者填写的是excel,后者填写的是xlsx。需要注意的是填写xlsx后,原来的两个参数就不能用了需要删掉。

有的时候excel文档是很讨厌的,比如原来数据是120,当转成SAS的时候,程序会“贴心”的把变量转成数值型,从而丢掉了120后面的0。这本来不影响分析,但是ORRES是要收集原始值的,人家填的是120,你怎么能写12呢?这个时候就需要我们强制把excel所有变量都变成字符型。

其实这是个偷懒的小技巧。我们只需要修改getnames=这个参数为no,这样excel第一行就会被当作变量的值而不是变量名或标题了。而excel的第一行一般来说,都是含有字符的,所以这样会让所有变量都被当作字符型处理。

当然,我们还可以直接修改excel,在excel中就直接把所有变量都定义为字符的,但是这样又犯了改原始数据的忌讳总之不推荐。

最后需要注意的是,mixed选项是很重要的,如果是no的话,一列中如果有纯数字的话很容易被判定为数值型,从而把那些有字符的变量置空。加了mixed=yes以后,一列中如果既有数字又有字符,就会被判定为字符型。但如果一列真的是纯数字,则会被判定为数值型。另外,对于日期格式,如果没有mixed话,会把日期导成date格式的数值型,但使用mixed之后,日期也会被当作字符处理。

如果dbms=excel的话,导入的字符变量最大长度默认是1024,再长会截断。但是如果加入语句textsize=32767;可以设定这个长度。但是如果dbms=xlsx的话,就不会出这个问题。

网上说scantext是可以自动扫描变量的最大宽度的,但是实际 *** 作下来似乎并非如此,具体有什么作用还不知道。

尽管使用了textsize=32767;,有些变量还是会被截断。这是因为SAS在读入的时候,是预先检查excel前面的若干行来判断长度和变量类型的,所以如果特别长的值在最后几行,可能会导致没有检查到改行,从而变量长度比值要短,以至于发生了截断。这种情况就要用dbms=xlsx了。

这是JDK的bug,Jetty自己有一些临时策略去修复它。所以你会看到这样的INFO级别的日志信息。升级一下JDK即可解决。

参考 >

当别人向程序员报一个bug,直到程序员把bug完整的修复好,整个过程是一个怎样的经历?

下面用一个维修工的故事类比一下,相信会很多程序员都会感到似曾相似!

假如你是一个电灯维修工程师。

一天晚上,有人想你反馈了一个bug:“18楼会议室的灯亮着,你要去把它熄灭”。bug的备注里还写到:这个bug很简单,你只需要按一下开关就可以关掉了,你应该在5分钟内修复这个bug。

你上到了18楼的会议室,灯的确是亮着,但是房间里没有这盏灯的开关。

怎么办?这时候你打算安装一个开关,然后通过开关把灯关掉,完美!

这个时候设计师会跟你说,它会破坏房间的美感。另外,墙壁是混凝土做的,你得有合适的工具和其他人的配合才能安装。但此时此刻,你找不到这些工具和人员来帮你。

如果没有这些辅助工具,安装开关,保守估计要2天时间。但是他们希望你只花5分钟就把灯关掉,因为他们害怕CEO哪天会经过18楼会议室,问为什么灯是亮着的,怕被问责。

5分钟过去了,你的手机响个不停,他们反复问你为什么灯还亮着,为什么按一下开关就能关掉这么简单的事你要弄这么久?

为了尽快解决问题,你实在没办法,所以,你设法进到了 18 楼走廊的天花板里,找到了会议室灯的电线,一刀切断,灯关掉了,问题解决了,你告诉了他们:你把先切掉了,灯就关了。

你的手机也安静了,但好景不长。

他们又有了新的疑问:线被你切掉了,如果哪天我们想开启会议室的灯,怎么办?因此,他们要求你把这盏灯的线牵引到地下室去,因为那里有开关,等他们需要开灯的时候,就通知你去地下室帮他们开灯。

你抗议这个荒谬的解决方案。但是你的上司说:“是的,这个解决办法不理想,但是现在是唯一的解决方案”。

这个时候你心里骂了他们一句:SB!

现在你要么按照他们的“荒谬”要求来做,要么辞职另谋高就,但你想了想,一旦到了新的工作环境,也难免会遇到这种荒谬的事情。

你咬咬牙,把18楼会议室的线牵引到了地下室,你发现已经有10几条线是从其他地方牵引过来的,这种荒谬的做法,你不是第一个做。你小心翼翼地把线牵引号,并尽人事地给左右地线做好了标记。

终于,你回到了你的办公桌,把bug标记成:“已修复”。

可刚过不久,测试员又重新开启了bug,并备注说:“会议室还是亮着的”。

你回到 18 楼的会议室。灯是灭着的。你返回办公桌前,关闭了 bug,注明你已经亲自检查过了。

测试员再次重新开启了 bug:“房间还亮着”。再次亲眼确认灯泡灭着后,你将情况汇报给了上司。

他建议你去地下室检查电线和开关。你抗议说你正直盯盯地看着灯,它就是灭着的。 “我知道,但去检查一下。这样一来你就可以告诉测试员你确认了所有流程。”

你叹了口气,前往地下室检查了电线和开关。它们不可能以任何你能理解的方式导电。 你向测试员反馈,你检查了电线和开关,它们不可能通电,你正看着灯泡,它是熄灭的。

“我不是指灯泡,”测试员说。 “bug 里描述的是房间里的光。房间现在仍然不够暗,你应该拉下窗帘。“你回应说窗帘的事不归你管。测试员不相信你说的话,亲自去询问你的领导。

经过一番激烈的讨论之后,他们终于同意将窗帘的问题提交给其他部分去解决,太好了,灯光的问题暂时到此为止了,bug可以顺利地关闭掉了。

现在,CEO突然决定要去18楼会议室开会。你接到通知,要赶去地下室,开启18楼会议室的灯。

你以最快的速度去到了地下室,连上电线,按下开启按钮。回到了办公桌,此时你的手机有了26个未读消息:

“出问题了,灯还是熄灭的!”

“有个问题,灯没有亮。”

“为什么这么久还没有亮灯?”

而最新的一条消息则是:“没事了,灯是亮的,辛苦了哈”。

不好说,粘贴一下看看吧

所谓“(Bug)”,是指电脑系统的硬件、系统软件(如 *** 作系统)或应用软件(如文字处理软件)出错。硬件的出错有两个原因,一是设计错误,一是硬件部件老化失效等。软件的错误全是厂家设计错误。那种说用户执行了非法 *** 作的提示,是软件厂商不负责的胡说八道。用户可能会执行不正确的 *** 作,比如本来是做加法但按了减法键。这样用户会得到一个不正确的结果,但不会引起bug发作。软件厂商在设计产品时的一个基本要求,就是不允许用户做非法的 *** 作。只要允许用户做的,都是合法的。用户根本就没有办法知道厂家心里是怎么想的,哪些 *** 作序列是非法的。

从电脑诞生之日起,就有了电脑BUG。第一个有记载的bug是美国海军的编程员,编译器的发明者格蕾斯·哈珀(Grace Hopper)发现的。哈珀后来成了美国海军的一个将军,领导了著名计算机语言Cobol的开发。

1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。

突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”[1]

从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)。

1)、在Red Hat Linux中函数库可以分为3种类型:静态函数库、共享函数库和动态加载函数库。

静态函数库在应用程序编译时就把函数的执行代码加入抄到应用程序中。

共享函数库中的函数当一个可执行程序启动时被加载。袭

动态加载函数库可以在程序运行的任何阶段加载函数。

2)、使用nm和ldd命令可以获得关于库函数的信息。

nm命令可以列出一个函数库文件中的符号表,它对静态的库函数和共享的库函数都能起作用。

ldd命令zd可以列出一个程序正常运行所需要的共享库。

3)、库函数缺省存放在/lib和/usr/lib中,以及动态库配置文件内所列的目录中。

如果库函数没有在这些目录下,可以在中加入所须目录,后运行ldconfig命令,使之生效。或设置环境变量LD_LIBRARY_PATH或LD_PRELOAD加入库函数所存放的目录。

还有不会的请参考《linux就该这么学》,针对各种linux疑难杂症,帮助linux学习者

开发时程序编码、开发成功时调试和后期维护都有可能引入bug。

软件开发时首先需要编写程序,有任何一个小错误都会导致bug出现,而在调试和维护时如果修改代码不细心也有可能引入bug。

软件开发时出现bug在所难免,重要的是修改bug和不要再在bug上面堆bug。

以上就是关于SAS 程序冷知识——proc import中遇到的那些bug全部的内容,包括:SAS 程序冷知识——proc import中遇到的那些bug、JAVA程序里遇到的bug,不知道什么意思,哪位大神救救我、程序员修复bug的吐血过程,太形象了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10089238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存