SAS应用-数据输入与format使用(1)

以下内容包括:

  • 建立数据集
  • 手动输入数据(复制粘贴)
  • 从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;
image.png
  • 个人更建议在explorer栏打开逻辑库直接看,只要记得看完关闭viewtable;反正都没有输出

(3)其它文件输入数据

1.csv文件

同样以上述数据为例,csv格式为


image.png
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;

结果


image.png

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的路径

你可能感兴趣的:(SAS应用-数据输入与format使用(1))