以下内容包括:
- 建立数据集
- 手动输入数据(复制粘贴)
- 从csv(推荐),txt,xls及其它格式输入
- Format的使用
(1)读取并建立新数据集
- sas 分号; 为语句的结尾,一般空格,tab,换行不影响语句的执行,可按照自己喜好对齐.但是建议语句不要太长不换行,以不要拖动左右滚动条为准.
- data步以data libname.dsn开头,run结尾.
以下程序将读取C:\Users\user\Desktop\study\test.sas7bdat的所有数据并保存在work.one里,sas7bdat为sas数据集的默认格式.
* ' /*xxx*/ '和 '*xxx; '为SAS中的注释,程序中不会被执行.多写注释是好习惯;
libname study "C:\Users\user\Desktop\study"; *建立逻辑库study,路径为桌面study文件夹;
data one; *建立临时数据集 one;
set study.test; /*假设下载了数据集test.sas7bdat放在study文件夹里;
等同于set "C:\Users\user\Desktop\study\test.sas7bdat"; */
run;
数据集名称规则:
- 名称可包含下划线,字母,数字,但必须以下划线或字母开头,不能有空格(一般用下划线代替,如dataset_name);
- 最长为32个字节,旧版可能为8字节;
- 变量名和数据集名最好为便于理解的英文缩写,不要拼音缩写! 实在要用抽象名称最好在程序开头注释!
(2)手动输入数据
data work.one;
input treat$ sex sbp_after sbp_before;
datalines;
med1 1 133 160
med2 2 140 161
placebo 1 163 161
placebo 2 155 160
;
run;
*input后定义变量名,默认变量为数值, 变量名带$表示其变量为字符;
*变量名之间和$左右随意空格;
*从datalines; 的下一行开始读取数据到 ; 结束;
查看数据
proc print data=one;
var treat sex sbp_after sbp_before; *选择查看的变量,这行可以不写,默认为全部变量;
run;
- 个人更建议在explorer栏打开逻辑库直接看,只要记得看完关闭viewtable;反正都没有输出
(3)其它文件输入数据
1.csv文件
同样以上述数据为例,csv格式为
data test;
infile "C:\Users\zhangqing\Desktop\test.csv" /*此处为文件位置全路径*/
firstobs=2 /*第一行为变量名,所以从第二行开始读取数据*/
obs=4 /*读四行,可省略*/
dsd ; /*分隔符为逗号,为csv默认格式*/
input treat$ sex sbp_after sbp_before; /*选择需要的数据*/
run;
此处要注意的是firstobs和dsd为infile的参数,所以一直到dsd才有分号;
input中变量名可以自己取,sas默认从左往右读取. 如代码的sex换成gender,那么sas中1212对应的的变量名会是gender.
input的数据类型必须一致.如treat下方的med1等含非数字,所以需要在treat后加上$来读取.
检查完以上几点读取数据仍然有问题并且日志没报错,请检查文件名或变量名是否正确,输出同理.
2.txt文件
txt文件一般由csv转换而来(指直接改后缀,分隔符仍为逗号),可使用同样代码
如果txt分隔符为制表符,上述代码中dsd换成dlm='09'x
- 注意: 对于txt文件dlm="指定分隔符" 当数据有空(缺失)时会跳过读取下一个
例如 a, ,1,2 四个变量第二个值缺失,在读取时为会直接跳过空格或空值,所以需用"."取代空数据;
读取csv时会自动用"."取代缺失值
3.xls,xlsx等其它文件
直接选File-import Data,使用import wizard.
import wizard会根据选项生成proc import的代码,复制代码即可
代码如下
PROC IMPORT OUT= work.test /*sas数据集*/
DATAFILE= "C:\Users\user\Desktop\test.xls" /*文件全路径*/
DBMS=EXCEL REPLACE;
RANGE="Sheet1$"; /*表名称*/
GETNAMES=YES; /*第一行有变量名选yes*/
MIXED=NO;
SCANTEXT=YES;
USEDATE=YES;
SCANTIME=YES;
RUN;
(4)Format的使用
1.format的建立
proc format;
value 标签名 变量值1="标签1"; 标签名别忘了$
注意data步中标签载入要在数据输入之前
变量值可为数字,数值范围,字符,缺失值(".");可用high,low,other表示范围
代码如下
proc format;
value gender 1="1.male"
2="2.female";
value bp 140-high="high"
135-140="mid-high"
other="mid";
value $ treatment "med1"="HCTZ";
data work.one;
format sex gender.
sbp_after bp.
sbp_before bp.
treat $treatment.;
input treat$ sex sbp_after sbp_before;
datalines;
med1 1 133 160
med2 2 140 161
placebo 1 163 161
placebo 2 155 160
;
run;
结果
2.format的保存与读取
SAS中带format的数据集如果缺失format文件或版本不对会打不开
format每次加载了才能使用,可通过fmtsearch()或数据集加载
方法一:直接舍弃format,免除后顾之忧
option nofmterr;
方法二:保存format文件
proc format library=libname;
/*将format保存在libname指定文件夹里,并生成format数据集*/
value xxx;
run;
下次使用时可读取已经保存在libname中的format,记得加载libname的路径
传数据时整个文件夹打包带走,只能给同版本sas使用
option fmtsearch(libname);
方法三:生成数据集-传输-读取
format已加载并暂时保存work里,cntlout输出相应永久数据集到libname的文件夹
proc format library=work cntlout=libname.format;
run;
拷贝传输数据集format,重新加载到另一台电脑里
proc format library=work cntlin=libname.format;
run;
同样记得加载libname的路径