important basic knowledge of SAS
getting data into SAS
tools
- 键盘宏 记录键盘操作
- 定制
- options
structure
- data step
- 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
- 数值型变量,长度自动设定8
- 字符型没有确定长度,根据最开始创建长度,且所有变量根据第一个变量的长度存在,length 需要带$符号
- 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;
合并
- 不用proc sort 进行排序
- 变量顺序在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中的应用
- 一种科学的数学分支,收集、解析、解释、陈述数据的科学
- 计数是最简单的统计方法
- 样本是观测或调查的一部分个体,总体是研究对象的全部
- 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相关推荐
- 5. SAP S/4 运维基础知识(Basic Knowledge) - SAP S/4 Basis Learning
本系列基于 SAP S/4 HANA version 1709 - On Premise 前言 本文用于读者快速了解SAP Basis的一些基本概念,不对具体的操作进行详细说明 目录 目录 前言 目录 ...
- Linux学习笔记——1、Basic knowledge
参考鸟哥的Linux私房菜地址:http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php 参考网中人地址:http://www.study-are ...
- 刘顺琦 - CSCI 561 midterm 2 basic knowledge
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPpj6Rfn-1627034161223)(basic%20knowledge.assets/image-202103 ...
- 使用Forms Authentication 身份验证 之 Basic Knowledge
与Forms Authentication相关的配置 在web.config文件中,<system.web>/<authentication>配置节用于对验证进行配置.为< ...
- basic knowledge
Position 属性:规定元素的定位类型.即元素脱离文档流的布局,在页面的任意位置显示. ①absolute :绝对定位:脱离文档流的布局,遗留下来的空间由后面的元素填充.定位的起始位置为最近的父元 ...
- Android | WIFI Direct -1 Basic knowledge
WIFI P2P 1 . 名词缩写 2. WIFI 模块几种常见工作模式 3.两种常见频段 4. P2P 中的几种角色 5. P2P 的组网技术 6 . Android 中的P2P 1 . 名词缩写 ...
- Ada语言学习(1)Basic Knowledge
文章目录 说在前头 命名 注释 数字 变量 变量类型 signed integers Enumerations Floating Points 类型重用(继承) 类型转换 运算符 属性(Attribu ...
- Java Basic Knowledge—— newCoder —— Java专项练习 —— Day04
- Java Basic Knowledge—— newCoder —— Java专项练习 —— Day01 —— 22 / 30
最新文章
- 各系统QT安装ROS后不显示src问题
- WINCE Driver 心得总结
- python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
- 推荐一些可以将QQ截取的gif图片修改为循环播放的软件
- 转:OWASP发布Web应用程序的十大安全风险
- 【转】去除inline-block元素的间隙
- 关于linux学习的热身知识八
- 笔记︱范数正则化L0、L1、L2-岭回归Lasso回归(稀疏与特征工程)
- oracle菜鸟入门,Oracle入门教程,新手必读
- 咖说 | 隐私何在?区块链是隐私保护的安全阀门
- 【Mysql 错误定位】语法错误
- echarts xAxis字显示不全
- PHP 常用字符串、数组处理函数
- H+框架 通过按钮新增选项卡功能
- 强推win10损害用户利益?这锅微软不背
- 【米思米工业产品知识分享】- 轴承的分类与主要用途
- 流水灯c语言程序tm,51单片机LED流水灯课程设计任务书+论文
- 核心微生物分析_基因测序找出肠道核心微生物群
- 【论文笔记】A Unified Approach for Tracking UAVs in Infrared
- oracle和勇士,坑与“借鉴”,都是KPI逼的?