楼主: stephanie_lan
2327 0

初学SAS笔记杂记两三事 [推广有奖]

  • 0关注
  • 2粉丝

已卖:106份资源

博士生

69%

还不是VIP/贵宾

-

威望
0
论坛币
11463 个
通用积分
0.2100
学术水平
7 点
热心指数
9 点
信用等级
4 点
经验
89368 点
帖子
152
精华
0
在线时间
523 小时
注册时间
2011-6-17
最后登录
2018-5-3

楼主
stephanie_lan 发表于 2014-12-15 10:36:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
最近一段时间在学习使用SAS软件进行初步的数据分析,现在记录一下近期遇到的问题,不分大小和巨细,只是对自己的一个提醒和巩固吧
1.在初接触到sas的时候,就产生了安装方面的问题。公司关联的数据库是Oracle的数据库,提供的机器是win7 旗舰版64位系统,Oracle的版本也是64位,但PLSQL 是32位,这就导致了在安装过程中遇到种种由于系统位数不匹配的问题(个人认为是如此,并且到目前也没找到比较合理的解决办法)。
下面的附件提供了SAS9.3多语言的安装包的地址和安装教程,以及sid更新的问题。
/*如果有google无法访问的问题,请自行到百度贴吧-chrome吧搜索解决办法。*/
http://www.zhiyanblog.com/sas-9-3-download-crack.html

2.SAS链接Oracle数据库,可以通过Oracle引擎的方式,或者通过ODBC去连接,这个可以参考以下几个帖子。此处应该注意的是如果想要做成永久库,必须要选择“启动时候启动”,另外路径就是你储存所有你的库中的工作表的位置,我开始傻乎乎的放到了桌面,可想而知我多郁闷了。
方法一:通过ODBC链接
http://wenku.baidu.com/link?url=0S8uPkxN_yaZhJHuFlpij7jHmoN16VGDi2An7j3xxd3fBsLe1cAnfNprFdVXSgQBXcSDDYAzmR_XSBpPvhUsvDf96RR96IekjkwFgjnNrwO
方法二:通过Oracle引擎链接
http://blog.sina.com.cn/s/blog_5fc375650100gkoj.html
另附上SAS与各种数据库关联的代码,如下:
http://biancheng.dnbcw.info/oracle/301500.html
  1. *******************************************************************
  2. 功能:链接Sql Server数据库
  3. 参数说明:
  4. libname (在SaS映射的数据库名) Data Source (SQL Server主机地址)
  5. Initial Catalog (SQL Server数据库名)
  6. User ID (SQL Server数据库登陆用户名) Password (SQL Server数据库登陆密码)
  7. *******************************************************************/
  8. /* 连接 DataBaseName 数据库 */
  9. libname base oledb provider=sqloledb
  10. properties=("Data Source"=ServerName "User ID"=MyUserName "Password"=MyPassWord "Initial Catalog"=DataBaseName);
  11. /*******************************************************************
  12. 功能:链接Oralce数据库
  13. 参数说明:
  14. libname (在SaS映射的数据库名) path (Oracle数据库SID)
  15. schema (Oralce数据库名一般为数据库一个用户)
  16. oracle user (oracle数据库登陆用户名) password (oracle数据库登陆密码)
  17. 注意:登陆Oracle数据库的帐号密码必须有权限登陆指定的数据库
  18. *******************************************************************/
  19. /* 链接 DataBaseName 数据库(SID:orcl) */
  20. libname DataBaseName oracle user=MyUserName password=MyPassWord path='orcl' schema=DataBaseName;
  21. /*******************************************************************
  22. 功能:链接dbf数据文件
  23. 参数说明:
  24. filename (指定需要打开的dbf文件)
  25. db5 (2,3,4,5 指定dBASE的版本)
  26. out (在SaS中的记录集)
  27. *******************************************************************/
  28. filename DataBaseName '盘符:\路径\文件名.DBF';
  29. proc dbf db5=DataBaseName out=DataBaseName;
  30. run;
  31. /*******************************************************************
  32. 功能:导入excel数据文件
  33. 参数说明:
  34. OUT(输出的Sas数据集)
  35. DATAFILE(指定导入的excel文件)
  36. RANGE(指定导入的sheet名称)
  37. GETNAMES(首行标题)
  38. *******************************************************************/
  39. PROC IMPORT OUT= WORK.DataBaseName
  40. DATAFILE= "盘符:\路径\文件名.xls"
  41. DBMS=EXCEL2000 REPLACE;
  42. RANGE="Sheet1$";
  43. GETNAMES=YES;
  44. RUN;
  45. /*******************************************************************
  46. 功能:导入access数据文件
  47. 参数说明:
  48. OUT(输出的Sas数据集)
  49. DATAFILE(指定导入的access数据表)
  50. DATABASE(access数据库文件)
  51. *******************************************************************/
  52. PROC IMPORT OUT= WORK.TableName
  53. DATATABLE= "TableName"
  54. DBMS=ACCESS2000 REPLACE;
  55. DATABASE="盘符:\路径\文件名.mdb";
  56. RUN;
复制代码


3.导入CSV格式的文件的时候,产生了一个很奇怪的问题。
    第一:关于数据格式的转换。在SAS读取文件的时候会自动根据数据内容选择是否对数据类型进行转换,其中最让我头疼的就是日期格式的转换,这个稍后再提。
    第二:部分字符的长度会超过限制,这种情况下我会采用两种办法,一是观察长度,用下面提到的modify来更改长度;二是通过去掉空格等无效字符的函数,如trim等(有听到人讲过会有leading space/zero这种函数,但是还没找到相关的用法,后续进行更改和补充)
    第三:不知为何,CSV格式文件的最后一列偶尔会无法导入,为了验证是否数据本身问题,我将数据库中的最后一列移动到前面的位置,发现可以导入,但是移动后的最后一列又无法导入,这个问题到现在我依然无法理解。


4.链接数据库之后发现由于权限限制问题,不允许对初始表做很多很多的操作,并且处于对数据的保护,我会在对每个表操作前,复制所有的信息到一个新表中,这里采取了proc sql语句
  1. proc sql;
  2. create table mytable as
  3. select *
  4. from work.dataset
  5. order by id;
  6. quit;
复制代码

这里加入了order by是方便操作,因为后面的数据处理中,还会有一些需要排序的操作,但是如果没有加入也不要紧,可以通过proc sort来实现
  1. proc sort data=work.dataset;
  2. by id;
  3. run;
复制代码


5.导入一个excel工作薄中所有工作表的小技巧-查自论坛
  1. libname xlsfiles excel 'C:\... .xls';
  2. proc contents
  3. data=xlsfile._all_;
  4. run;
复制代码


如果想导入的文件是.xlsx的话,就直接吧.xls改成.xlsx即可

6.给数据加标签-format的用法之一
  1. /*step 1用value语句在proc format中创建标签格式,完成后,在work库中会产生一个format的文件*/
  2. proc format;
  3. value sex1
  4. 1='male'
  5. 2='female'
  6. run;
  7. /*如果次数的变量是字符变量,要在前面上上$*/
  8. /*step 2把创建的标签格式用format语句赋值给相应的变量,该format语句可以用在proc 或者data中*/
  9. proc freq data=work.dataset;
  10. fromat sex sex1.;
  11. run;
  12. /*这里sex1.的那个‘.’不可以省略*/
复制代码


7.更改变量的长度。此处采用的是sql语句中的modify来实现
  1. proc sql;
  2. alter table work.dataset;
  3. modify var1 char(1);
  4. quit;
复制代码


8.更改变量类型
在SAS中只有字符型和数字型(包括时间)两种类型,因此对应于一些变量,比如时间类型的变量就需要一些转化。
其中我对于时间类型的数据真的是特别头疼。也希望会找到更加有效的办法来解决。说一下我遇到的情况。
    第一:原始数据是'2014-12-14'这种类型,但是读取后变成数字类型的data16.,如'14DEC14 00:00:00'。经过我的观察,这种类型的数据的长度有的是8,有的是10。可以用datapart('14DEC14 00:00:00')提取date的部分(提取时间部分就是timepart),但是提取后,有可能会变成一串数字,这时候可以查看长度,是否不正确,然后在利用format mmddyy10.等来转换。
    第二:遇到直接将原始数据'2014-12-14'变成字符型的'2014-12-14',这种情况,可以通过substr的方式提取或者通过put来转换
substr的方式













二维码

扫码加我 拉你入群

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

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

关键词:初学sas files excel Properties database password google Oracle 数据库 记录 旗舰

我是一个小。。。

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 15:57