getting data into SAS

tools

  1. 键盘宏 记录键盘操作
  2. 定制
  3. options

structure

  1. data step
  2. proc + name + data=dataset name; step

how to getting data into sas?

data step

data airs;(in work library,temporary)set  sashelp.air;run;

read many datasets

set statement(vertical)

data help;set sashelp.eisobj4 sashelp.eisobj5;run;

when the database have similar name and have some same rules the we can use’-’ to link those database in order to set together as one new database.
在名字相近且有规律的情况下我们使用-符号在set statement中连接,读取多个数据,垂直放置

data nvst;set sashelp.nvst1-sashelp.nvst5; /*set statement join datasets like vertical ,but merge different*/run;

merge statement(horizontal way)

proc sort data=dataneme;
by variables;
run;
data name;
merge sashelp.macrs3(in=a) sashelp.macrs5(in=b);
by variables;
if a=b;
run;
/*in option create an auto-variable like  in=a, a is an auto-variable, and a exist not null. 只想保留在macrs3中只存在的数据,用in  */

keep or drop

data demo1;
set sashelp.demographics;
keep/drop name pop region;
run;

rename

data demo1(keep= name pop isoname rename=(pop=population));
set sashelp.demographics(keep= name pop isoname rename=(pop=population));
keep/drop name pop isoname;
rename pop=population;
run;
在sas中语句的执行在data步骤根据设定好的次序来的

reading raw data file(读取外部数据)

libname

libname name'local';
libname data'C:\Users\apple\Desktop\SAS 经典练习题';
data word;
set data;
run;

proc import

excel file

proc import datafile ='路径+名称包含扩展名' out =输出在library哪里 dbms=xlsx/access/dbf/dlm/dta/sav/csv/jmp replace;
*sheet='sheet name';*(one file have more than two sheets)
run;

txt

proc import datafile=‘路径+拓展名.txt’ out=输出在library的哪里 dbms=dlm(分隔符) replace;
*delimiter=‘09'x;tab建*(mark,在txt中如果出现 tab为分隔符号时候直接用)
*delimiter=‘,’;逗号为分隔符*
input statement;
run;

data type and data format

type(way to stores data,储存数据的方法)

character(left-justifying )

data test;
length a $20;
a='123';(字符型带引号)
run;

numeric(right-justifying)

data test;
length a 8;
a=123;
run;

length

  1. 数值型变量,长度自动设定8
  2. 字符型没有确定长度,根据最开始创建长度,且所有变量根据第一个变量的长度存在,length 需要带$符号
  3. legth + 变量名字 +变量长度;定义变量的长度

format (理解和显示数据的方式,the way for sas understand and display data)

format statement;

numeric

data test;
a=2345;
format a 8.1;(format var w.d;)
run;
dollar8.1数字前面带$符号
a=0.156;
format a percent 8.1;百分比
format a z4.;前面加上0

character

data test;
a='hello';
format a upcase20.;
run;

data

日期零点1960/1/1

data day;
a=1000;
format a yymmdd10.(都是数字);/format a date9.;(带有单词)
run;

time

data test;
a=1000;
format a time8.; time5. and time8. 不同的是带不带秒
run;

transfer(num-chara)

put num transfer to character

input character transfer to num

data test;
a=1000;
format a yymmdd10.;(different between put and format)
b= put(a,4.);/b=put(a,yymmdd10.);
run;
data test1;
length a $1000;
a=‘1000’;output;
a='123.4';output;
a='5.39';output;
run;
data test2;
set test;
b=input(a,*best.*);
run;

logic/loop statement(条件判断)

if statement

if then(后面只能加一个语句)
if then else
if then else if then else
if then do; statements();end;else do;statements;end;
if…;
注意一些长度的设定

data cars;
set sashelp.cars;
keep make model type msrp;
run;
data test;
set cars;
if msrp>50000 then price='high';
else price='low';
run;
data cars2;
set cars;
length price $8;
if msrp>50000 then do;
price ='high';
price2='1';
end;
else do;
price='low';
price2='2';
end;
run;

select(if 太多情况)(逻辑条件分支)

select;
when()…;
otherwise;必须指定
end;

data test;
set cars;
length price $10;
select;
when(1000<msrp<2000) price='very low';
otherwise price=‘unknow’;
end;
run;
不同分类的情况下
select(type);
when(‘type中间的变量’) typen=1;
......;
otherwise*(也可以什么都不加);
end;
run;

条件判断
= eq
^= ne
gt/lt
ge/le

loop

do while 条件满足一直执行/观测值从1 取值

data;
i= 1;
sum=0;
do while(i<7);
sum=sum+i;
i+1;
output;
end;
run;

do until 只要不满足就一直执行,从2 取值,从最后开始执行,最后一次满足情况do until 依旧会执行

data d;
i=1;
sum=0;
do until(i>100);
sum=sum+i;
i+1;
output;
end;
run;

function(函数)

数值型函数

计算类

data temp;
a=123;b=-12;c=0;d=75;
var=abs(a);绝对值
sqrt=sqrt(a);平方根
var1=mean(a,b,c,d);平均值
var2=median(a,b,c,d);中间值
var3=mod(7,3);余数
var4=mod(b,a);余数
var5=sign(a);
var6=sign(b):找的是符号
var7=sum(a,b,c,d);求和
run;

选取类

data temp;
a=123;b=-12;c=0;d=75 e=. f=4 ;
var=max/min(a,b,c);取最大/最小
var1=largest(第几名最大的),largest(2,a,c,d,b); 选取在几个数里面的第几个
var2=smallest(#,a,b,c,d);选取几个中第几小的变量
var3=n(a,b,c,d,e,f);选取值中非空的数量
var4=nmiss(a,b,c,d,e,f);选取缺失值
run;
data temp;
set sashelp.yr1001;
**var1=n(of s0001-s0010); of 表示后面一系列变量按照名字0001-0010
var1=n(of weight--molevel);在名字没有逻辑的情况下,没有相关的情况下**
run;

改变类,取整数相关的

data temp;
a=3.1415;
var1=round(a);取整四舍五入
var2=round(a,0.01);到0.01进行取整
var3=floor(a);小数点之间抹去,不进1
var4=ceil(a);小数点抹去,且直接进1
var5=int(a);取整数部分 ,写的整数是多少就拿多少
run;

字符型

截取类

1.substr 按照位数和长度来截取变量值
substr(var,star,length(总长度)) sas 变量第一个数字是1

data cars;
set sashelp.cars;
mod=substr(model,2,1);
a=‘hello,word’;
b=substr(a,1,5);
run;

2.scan 分隔符截取
scan(var,分隔符位置(选前面位置),‘分隔符’)

data cars;
length a $50;
a='hello, word,hello,china';
a='hola, mundo';
a='bomjour, le monde';
b=scan(a,1,‘,’);(hello)
c=scan(a,2,',');(word)
run;

3.index 设定字符在字符串哪个位置,与if一起使用
index(var,需要选取的字符是什么)

data cars;
length a $50;
a='hello, word,hello,china';
a='hola, mundo';
a='bomjour, le monde';
b=index(a,'china');
run;
if index(a,'china') then answer='great!';

4.find 返回字符串位置

data cars;
length a $50;
a='hello, word,hello,china';
a='hola, mundo';
a='bomjour, le monde';
b=find(a,'china');
run;

5.cat() 联合/|| 也是连接的方法

空格类 处理空格类的东西

data txt;
length a $30;
a='hello, world!123';output;
a='      hello123,world!';output;
a='hello1,      world!';output;
a='    hello,       world!';output;
run;
data new; set txt;
b=compbl(a); 多个空格缩减为1个
c=a|| ‘xyz’;
b=trim(a);删除变量结尾的空格
b=left(a);把头部空格去掉
b=strip(a);变量头尾的空格全部去掉
**b=compress(a);去掉所有空格
b=compress(a,'w');去掉w
b=compress(a,' w') 空格和w都去掉
b=compress(a,,'a'); modify的用法**
run;

大小写类

data rew;
set sashelp.cars;
mod=upcase/lowcase(model);大小小写
mod=propcase(model);首字母大小

日期变量(数值型的一部分)

data date;
a=10000;
format a yymmdd10.;
b=year/month/day(a);
c=qtr(a);季度
c=date();
format c yymmdd10.;
d=time();
format d time8.;
e=datetime();时间日期一起取
format a datetime22.;
intck输入两个日期返回特定间隔数量
a=date();
b='010ct1949'd;
c=intck('year/month/day',b,a);
format a b yymmdd10.;
intnx 给出一个日期和一个间隔数,输出你想要的日期
e=intnx('day.quarter/month/year',a,100);
format a b d yymmdd10.;
run;

sort/translate/finding duplicate 排序、转置、查重

proc 名字 data= option;纵向运行,函数是横向运行
statement1;
statement2;
run/quit;

proc sort 排序/查重

data cars;
set sashelp.cars;
run;
proc sort data=cars (out=cars2 不改变原本数据集新的排序在cars2中);
by cylinders msrp;先按照1排序 若变量相同在按照2排序 descending 倒叙排列
run;
**查重**
data cars;
set sashelp.cars;
keep make origin msrp;
run;
proc sort data=cars out= car3 nodupkey;只找by 后面接的变量 看的是变量
by make;
run;

*data cars;
set sashelp.cars;
keep make origin;
run;
proc sort data=cars out= car3 nodup dupout=dup(删除的变量输出一个数据集);针对记录所有变量都完全一样 去掉,看的是数据集
by make;
run;*

转置 proc transpose 矩阵的转置,横纵改变

**data stop;
set sashelp.stocks;
run;
proc sort data=stops out=stocks;
by date;
run;
proc transpose data=stocks out=stocks2 prefix=前缀 suffix=后缀;
by date;哪个变量依旧是竖着的
id stock;哪个变量是横着的
idlabel;指定标签,转置之后
var volume;填值
run;**
proc transpose data=2 out=3;
by date;
var ibm intel Microsoft;
run;逆操作 通过不加id的方式 return 回去

sas with sql(proc sql)

proc sql;
create table car as(输出数据集)
select   make, model  from  sashelp.cars where msrp>5000; (分隔符不是空格是,where 语句是数据筛查)
quit;
创建新变量
proc sql noprint;
create table cars1 as
select make,model,(enginesize/horsepower*50+(mpg_city +mpg_highway)/2)/msrp*10000 as scorefrom sashelp.cars
( where msrp>50000)order by score(排序);
quit;
group by 结果进行分组每一个分组只出现一个
proc sql noprint;
create table cars3 as
select make,avg(msrp) as avgprice from sashelp.cars
group by make
order by avgprice;
quit;
case when .. then....end as 语句=if statement 在proc sql 创造变量时候不用用length 提前赋值案例
proc sql noprint;
create table  cars5 as
select  make,model,msrp,
case when msrp<30000 then 'low'when 30000<msrp<50000 then'normal'when msrp>=50000 then 'high'end as price
from sashelp.cars;
quit;

合并

  1. 不用proc sort 进行排序
  2. 变量顺序在select里面进行调整
    一对一
proc sql;
create table score as select a.name,math,english from math as a join english as b on a.name=b.name;quit;

多对多(left join 左对齐只保留左侧数据集中存在的变量
right join 右对齐 只保留右侧数据集中存在的变量
cross join 交叉连接,让每条记录与另一个数据集的所有记录连接
inner join只保留左右数据集中都存在的记录
outer join 保留存在任何一个数据集中的记录
union )

proc sql;
create table result as
select a.*,b.medicine from ae as a join cm as b on a.id=b.id;
quit;with 8 rows and 3 columns.

统计分析在sas中的应用

  1. 一种科学的数学分支,收集、解析、解释、陈述数据的科学
  2. 计数是最简单的统计方法
  3. 样本是观测或调查的一部分个体,总体是研究对象的全部
  4. sas中的统计分析使用proc实现,选择正确的proc名称可以生成相应的统计分析结果

获取统计量(数值型)

数值型变量的统计量

n
mean
median
max/min
std…

proc sort data=数据集;
by 分组;
run;
proc means data=数据集 (n mean median clm lclm uclm p1 p99....);
var 变量名;
by 分组;单独输出结果
class 分类;输出一个表
where 筛选;
output out=数据集名字;
run;
数目 均值 标准差 最大 最小

字符型变量(proc freq)其实也可以对数值型使用

proc freq data=数据名;
table var1*var2/var1 var2.../var;(卡方检验 var1*var2/chisq、nocol、norow、nopercent;)
output out=result;
run;

相关性分析(首先使用测试是否相关)

对多个变量研究两两之间的数值变化相关程度的研究
使用从-1到+1的无量纲数字表示相关性的程度,-1表示完全负相关,+1表示完全正相关,越接近0表示越不相关
记录数越小,相关系数的波动越大
记录数越多,相关系数越稳定

proc  corr data=数据名;
var 变量;
run;

回归分析

研究两个或多个变量定量关系

  • 一元回归与多元回归
  • 简单回归(一个因变量)与多重回归
  • 线性回归(直线)与非线性回归(非直线)
proc reg data=数据名;(线性回归)
model 因变量=自变量;
run;

生存分析

对比不同分组下的留存情况(个体生存时间,分组,censor变量)

  • 客户留存情况
  • 患者生存情况
proc lifetest data=数据集;
time 时间;(tiem*censor(需要的值))
starts 分组;
run;

主成分分析(进行复杂分析之前的步骤)

使用正交变换对可能相关的变量的观测进行线性变换,从而投影为一系列线性不相关变量的值

  • 相关系数尽可能小
  • 过多影响分析效率,过小影响可信度
proc princomp data= out= ;
var变量;
run;

聚类分析

将每条记录按照区别分成若干类的统计过程

proc cluster data=变量名;
id 变量;
var 变量s;
run;

如何进行统计分析

从结果出发,确定要分析什么
选择正确的proc,使用基本的proc方法就可以确认
调整程序语序

important basic knowledge of SAS相关推荐

  1. 5. SAP S/4 运维基础知识(Basic Knowledge) - SAP S/4 Basis Learning

    本系列基于 SAP S/4 HANA version 1709 - On Premise 前言 本文用于读者快速了解SAP Basis的一些基本概念,不对具体的操作进行详细说明 目录 目录 前言 目录 ...

  2. Linux学习笔记——1、Basic knowledge

    参考鸟哥的Linux私房菜地址:http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php 参考网中人地址:http://www.study-are ...

  3. 刘顺琦 - CSCI 561 midterm 2 basic knowledge

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPpj6Rfn-1627034161223)(basic%20knowledge.assets/image-202103 ...

  4. 使用Forms Authentication 身份验证 之 Basic Knowledge

    与Forms Authentication相关的配置 在web.config文件中,<system.web>/<authentication>配置节用于对验证进行配置.为< ...

  5. basic knowledge

    Position 属性:规定元素的定位类型.即元素脱离文档流的布局,在页面的任意位置显示. ①absolute :绝对定位:脱离文档流的布局,遗留下来的空间由后面的元素填充.定位的起始位置为最近的父元 ...

  6. Android | WIFI Direct -1 Basic knowledge

    WIFI P2P 1 . 名词缩写 2. WIFI 模块几种常见工作模式 3.两种常见频段 4. P2P 中的几种角色 5. P2P 的组网技术 6 . Android 中的P2P 1 . 名词缩写 ...

  7. Ada语言学习(1)Basic Knowledge

    文章目录 说在前头 命名 注释 数字 变量 变量类型 signed integers Enumerations Floating Points 类型重用(继承) 类型转换 运算符 属性(Attribu ...

  8. Java Basic Knowledge—— newCoder —— Java专项练习 —— Day04

  9. Java Basic Knowledge—— newCoder —— Java专项练习 —— Day01 —— 22 / 30

最新文章

  1. 各系统QT安装ROS后不显示src问题
  2. WINCE Driver 心得总结
  3. python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
  4. 推荐一些可以将QQ截取的gif图片修改为循环播放的软件
  5. 转:OWASP发布Web应用程序的十大安全风险
  6. 【转】去除inline-block元素的间隙
  7. 关于linux学习的热身知识八
  8. 笔记︱范数正则化L0、L1、L2-岭回归Lasso回归(稀疏与特征工程)
  9. oracle菜鸟入门,Oracle入门教程,新手必读
  10. 咖说 | 隐私何在?区块链是隐私保护的安全阀门
  11. 【Mysql 错误定位】语法错误
  12. echarts xAxis字显示不全
  13. PHP 常用字符串、数组处理函数
  14. H+框架 通过按钮新增选项卡功能
  15. 强推win10损害用户利益?这锅微软不背
  16. 【米思米工业产品知识分享】- 轴承的分类与主要用途
  17. 流水灯c语言程序tm,51单片机LED流水灯课程设计任务书+论文
  18. 核心微生物分析_基因测序找出肠道核心微生物群
  19. 【论文笔记】A Unified Approach for Tracking UAVs in Infrared
  20. oracle和勇士,坑与“借鉴”,都是KPI逼的?

热门文章

  1. Man Is Here For The Sake of Other Men 人是为了别人而活着
  2. 微星主板黑苹果_安装黑苹果,选对硬件能少熬几天夜……
  3. 客单价3000一周热卖1000万!又有哪些快手神奇商品爆单了?
  4. 默认墨迹天气 下雪效果
  5. Android 仿墨迹天气24小时预报
  6. 《软件质量保证和管理》电子课件下载
  7. 人民日报探店联想安定门店,联想智慧零售变革现成效
  8. js计算给定日期顺延工作日后的日期
  9. java计算机毕业设计物联网实验课程考勤网站源码+lw文档+系统+数据库
  10. python入门笔记之初步了解代码