SAS入门操作

1.1 新建数据集
libname chap1 ‘E:\sasdata\chap1’;
在E:\sasdata\chap1中新建一个逻辑库,E:\sasdata\chap1必须真实存在,其中保存着我们要调用的文件,同时路径名字尽量是拼音或者英文。chap1中的数据只有是SAS data set时才可以被直接调用
data chap1.example1_1;新建永久sas数据集chap1.example1 前一部分为库名,后一部分为数据集名
data work.example1_1; 或者work.example1_1 临时数据库保存在work下
data 数据集名;
input 变量名;
card; 输入数据

run;
proc print data=数据集名; #将数据集显示在output窗口上
run;

eg:建立永久数据集

libname classc “C:\Users\Administrator\Desktop\7\SAS-1024”; #创建逻辑库
filename class “C:\Users\Administrator\Desktop\7\SAS-1024\class.csv”; #指定要调用的文件(同时为该文件的路径命名class,方便后面调用)
data classc.class1;#在classc逻辑库中创建数据集class1(库名+数据集名)
infile class#导入要调用的文件
dsd;
input name$ id$ test1 test2 gender$;
run;
1
2
3
4
5
6
7
一个逻辑库对应两个物理位置
libname classc (“C:\Desktop\7\SAS-1024” “C:\Desktop\7\SAS-1025”);

逻辑库的查看与取消
1.在log窗口查看逻辑库连接 libname 库名 list;
2.在log窗口显示全部已设定的库的信息 libname ALL list;
3.取消已经指定的库 libname 库名 clear;

SAS数据集存储在SAS的逻辑库(library)文件集中,逻辑库是一个连接,将磁盘中存储的文件和SAS系统联系起来。逻辑库命名遵循命名规则
1.1SAS标识符必须由英文字母,数字,下画线组成
1.2第一个字符必须是英文或者下划线
1.3标识符中字母不区分大小写
1.4标识符长度不宜过长
1.5逻辑库命名不超过8个字符,数据集,变量命名不超过32个长度

1.2从外部导入数据
1.2.1 import
1.2.2 data step输入文件
infile “外部文件的所在位置及名称”<选项>;#指定一个包含原始数据的外部文件,出现在input之前
input 变量名1 变量名2…; #按列输入;格式化输入;列举输入
按列自由输入

data bank;
infile “E:\SAS\SAS-Yan\lec3-170927\bank1.txt”;
input subj $1-3
dob$4-13
gender$14
balance$15-21
year 10-13
;
run;
proc print data=bank;
run;
1
2
3
4
5
6
7
8
9
10
11
格式输入
input <列指针控制> 变量名 输入格式;

data bank;
infile "E:\SAS\SAS-Yan\lec3-170927\bank1q.txt;
input @1 subj $3.
@4 dob mmddyy10.
@14 gender$1.
@15 balance7.
;
run;
1
2
3
4
5
6
7
8
SAS有输入和输出格式,输入格式在input中使用,输出格式在format中使用
用于输入有特殊格式的数据:日期,带小数的数字,含空格的字符串
常用:
W. 宽度为W位的标准数字(无小数)
W.D 含小数的标准数字,总长为W位(小数点,负号各占一位)
W.长度为W的标准字符串COMMAW.D长度为W的数字,每三个数字用逗号隔开,且逗号占一位W.长度为W的标准字符串COMMAW.D长度为W的数字,每三个数字用逗号隔开,且逗号占一位CHARW 宽度为W且含有空格的字符串

format中指定输出格式

data bank;
infile "E:\SAS\SAS-Yan\lec3-170927\bank1q.txt;
input @1 subj $3.
@4 dob mmddyy10.
@14 gender$1.
@15 balance7.
;
format dob data9. balance dollar11.2;
run;
proc print data=bank;
run;
1
2
3
4
5
6
7
8
9
10
11
列举模式
这种模式较为简便,但是变量名顺序必须和数据中相同,无法更改

data bank2;
infile "E:\SAS\SAS-Yan\lec3-170927\bank2.txt;
length subj dob $10. #列举模式中每个变量默认最大读入长度为8,此语句可以修改最大长度
input subj $
dob $
gender$
balance
;
run;
title=“list of bank2”;
proc print data=bank;
run;
1
2
3
4
5
6
7
8
9
10
11
12
1.3读入csv文件
data contact;
infile “E:\SAS\SAS-Yan\contact.csv”
dsd;#将多个相连的分隔符由空格改为逗号,csv必加
input name$ id$ test1 test2 genderKaTeX parse error: Expected 'EOF', got '\SAS' at position 92: … infile "E:\̲S̲A̲S̲\SAS-Yan\contac… id$ test1 test2 gender$;
run;
title=“contact.csv”;
proc print ;
run;
1
2
3
4
5
6
7
8
9
查找dlm其他用法

非标准格式读入
1.一行多观测,空格作为间隔 input语句后中加入@@ 行保持符
2.多行一观测,空格作为间隔 /表示下一行
3.混合
4.读取特定行

data bank;
infile “E:\SAS\SAS-Yan\lec3-170927\bank1q.txt” firstobs=3 obs=6;
input @1 subj $3.
@4 dob mmddyy10.
@14 gender$1.
@15 balance7.
;
format dob data9. balance dollar11.2;
run;
proc print data=bank;
run;
1
2
3
4
5
6
7
8
9
10
11
1.4基于列的操作运算
针对变量的操作:
-生成新的变量
–依据现有变量
–不依据现有变量
-删除已有变量
-修改已有变量
-给现有变量命名
-set keep drop rename 常用函数 复合判断语句 do-end语句块

fileneme myfile “E:\data\chap1\garden0.dat”;
data garden;
infile myfile;
input name$ tomato$ zucchini peas grapes;
zone=14; 建立新变量并直接赋值
type=“home”;
zucchini=zucchini
10;*改变已有变量
total=tomato+zucchini+peas+grapes;
periom=tomato/total;*利用原有变量计算新变量
run;

data garden1;
set garden;
keep name total; *保留变量
run;

data garden2;
set garden;
drop zone type; *删除变量
run;

data garden3(replace=yes);新建立的garden3覆盖了garden2
set garden2;
drop name
rename total=all; *重命名变量
run;

data garden4(replace=yes);
set garden;
logtomato=log(tomato); *添加变量
firstchar=substr(name,1,2); *添加变量,提取name前两个字母
if grapes<50 then groupgrapes=“low”;*添加变量groupgrapes
else groupgrapes=“high”;
run;

data garden4(replace=yes);
set garden;
logtomato=log(tomato); *添加变量
firstchar=substr(name,1,2); *添加变量,提取name前两个字母
if grapes<50 then groupgrapes=“low”;
else if grapes>=50 and grapes<100 then groupgrapes=“med”;
else groupgrapes=“high”;
run;

data garden4(replace=yes);
set garden;
logtomato=log(tomato); *添加变量
firstchar=substr(name,1,2); *添加变量,提取name前两个字母
if grapes<50 then *do–end 语句块,多变量嵌套
do;
groupgrapes=“low”;
zone=16;
else
do;
groupgrapes=“high”;
zone=12;
end;
run;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
1.5变量的运算
逻辑运算
EQ NE GT LT GE LE IN

数值或文本型变量:
取整(INT)
对数(LOG)
极值(MIN,MAX)
均值(MEAN)
求和(SUM)
计数(N,NMISS)
四舍五入(ROUND)

日期型变量
-year(date):
-month(date)
-day(date)
-weekday(date)
mdy(m,d,yr):生成ye年m月d日的sas日期值

字符型变量
lowcase(s),upcase(s):改变大小写
substr(s,p,n):从字符串s中第p个开始抽取n个
repeat(s,n):将s重复n次
index(s,s1):查找s1在s中的位置
length(s):返回s的长度
tranwrd(s,s1,s2):从字符串s中把所有字符s1替换成s2后的结果

1.6基于行的运算操作
-排序 sort+by
-提取部分观测
–指定条件提取 if where
–随机提取 surveyselect
-添加新观测 append+base,data
-删除已有观测:delete语句
-修改已有观测

*排序
filename myfile “文件夹路径”;
data marine;
infile myfile(lengths.dat);
input name$ family$ length@@;
run;
proc sort data=marine out=seasort nodupkey; *输出为数据集seasort,不加out时覆盖原有数据集;nodupkey删除冗余观测
by family descending length; *先按family升序排列,再按length降序排列
run;
proc print data=seasort;
title print data=seasort;;
run;

*提取指定条件的观测
data seasort_whalel;
set seasort;
if Family=“whale”;
run;
*or
data seasort_whalel;
set seasort;
where Family=“whale”;
run;

*where与by
proc sort data=marine out=seasort_whale nodupkey;
where Family=“whale”;
by descending length; *先按family升序排列,再按length降序排列
run;
proc print data=seasort_whale;
title "whales only (sorted);
run;

*随机抽取
proc surveyselect data=marine method=srs n=5 out=sampled_marine;
*从marine中抽取5个数形成sampled_marine,其后可以加seed=1以多次抽取相同的数
run;
proc print data=sampled_marine;
run;

*添加新观测(像原有数据集中添加一条或者多条记录)
data temp(replace=yes);
input name$ family$ length;
datalines;
aaa shark 60
;
run;
proc append base=marine data=temp;
run;
proc print data=marine;

*删除指定的观测
data marine;
set marine;;
if family="" then delete; *删除缺失值
run;

data marine;
set marine;
if n=2 or n=3 then delete; *删除第2和第3个观测??
run;

*重编码
data marine;
set marine;
if family="" then family=“unknown”;
run;

*转置(仅限于数值变量)
PROC TRANSPOSE <DATA=输入数据集 OUT=转置数据集><选项列表>
VAR 变量列表
ID 变量
COPY 变量列表
RUN;

libname chap1 “”;
proc transpose data=chap1.A out=chap1.TA name=course;
/将数据集cha1.A转置成chap1.TA, 变量名name改为course*/
var statistics chinese; /指定转置变量/
id name;
run;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
1.7多数据集操作
–复制数据集 data +set
–拆分数据集 data+output
–合并数据集

data marine0;
set marine;
run;

*拆分数据集
data whale shark(replace=yes);
set marine0;
if family=“whale” then output whale;
else if family=“shark” then output=shark;
run;

*数据纵向连接
set 数据集名称1 数据集名称2… 数据集名称n;
libname chap1 “”;
data chap1.AB;
set chap1.A chap1.B; /合并数据集chap1.A和chap1.B/
run;

data chap1.AC;
set chap1.A chap1.C; /合并数据集chap1.A和chap1.C/
run;

*数据集横向合并
libname chap1 “”;
proc sort data=chap1.C out=chap1.C;
by name;
run;
proc sort data=chap1.D out=chap1.D;
by name;
run;
/*以上对数据集chap1.C和chap1.D按照关键变量name升序排列/
data chap1.CD;
merge chap1.C chap1.D; /横向合并数据集chap1.C和chap1.D/
by name; /设置关键变量为id/
run;

##无数据集 NULL
不产生数据集,仅在log页面下显示输出
data NULL;
x=exp(5);
y=log(10);
put x= y=;
run;

data NULL;
x=0.1;
y=1-(1-x)**50;
y2=round(y,0.01);
y4=round(y,0.0001);
put y2= y4=;
run;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
1.8循环语句
1.DO循环
格式:
DO 计数变量=起始值 TO 结束值 BY 步长;
循环体…;
END;
在循环体中可以用LEAVE语句跳出循环,使用COUNTRY语句结束本轮循环,调整计数变量进入下一轮循环。

data chap2.example2_1;
do x=5 to 30 by 5; /设置x的起始值为5,终止值为30,步长为5/
y=log(x); /取y值为x的自然对数/
if y>3 then leave; /若y的值大于3结束循环/
output;
format y 8.5; /定义y的输出形式为总长度为8位,小数部分占5位/
end; /结束循环·/

/·方法二:DO循环结合CONTINUE语句/
data chap2.example2_1;
do x=5 to 30 by 5; /设置x的起始值为5,终止值为30,步长为5/
y=log(x); /取y值为x的自然对数/
if y>3 then continue; /若y的值大于3就跳出循环/
output;
format y 8.5; /定义y的输出形式为总长度为8位,小数部分占5位/
end; /结束循环/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2.DO WHILE循环
格式:
DO WHILE 循环的语法结构;
DO WHILE(循环继续条件);
循环体语句;
END;
开始执行时,会先判断循环条件表达式的逻辑结果是否为真,若为真,则继续执行循环体语句,若为假则循环结束,循环语句每执行一次,检验循环条件一次

data chap2.example2_2;
y=100; /取y的初始值为100/
do x=2 to 10 by 2 while (y<3000); /* 当y的值小于3000时,继续循环*/
y=y*x; /y的值为前一次循环结束后y的值和当次循环x值的乘积/
output;
end;
run;
1
2
3
4
5
6
7
3.DO UNTIL 循环
格式:
DO UNTIL (循环退去条件);
循环体语句…;
END;
语句开始执行,首循环体每执行一次都要判断是否满足循环退出条件,若循环退出条件表达式的逻辑结果为真,则退出循环,否则重复执行循环体语句

data chap2.example2_2;
y=100; /取y的初始值为100/
do x=2 to 10 by 2 until (y>=3000); /* 当y的值大于等于3000时,退出循环*/
y=y*x; /y的值为前一次循环结束后y的值和当次循环x值的乘积/
output;
end;
run;
1
2
3
4
5
6
7
上述三种循环都在DATA步完成,DO循环不设限定条件,DO WHILE和DO UNTIL循环都设置了循环条件;DO WHILE 的条件在循环体开头,DO UNTIL的条件在循环体结束

1.9条件分支结构 if-else in select
*if-else
data conditional;
length gender $1 quiz $2;
input age gender midterm quiz finalexam;
if missing(age) then agegroup=.; *缺失值
else if age lt 20 then agegeoup=1;
else if age lt 40 then agegroup=2;
else if age lt 60 then agegroup=3;
else if age ge 60 then agegroup=4;
datalines;
1
2
3
4
5
6
7
8
9
10
*写if语句时,一般将最容易出现的语句写在前面

if quiz=“A+” or quiz=“A” or quiz=“B+” or quiz=“B” then quizrange=1;
else if…
改为in
if quiz in (“A+” “A” “B+” “B”) then quizrange=1
1
2
3
4
*用select结构进行逻辑判断代替一系列的if 和else if

select(agegroup);
when(1) limit=110;
when(2)limit=120;
when(3)limit=130;
otherwise;
end;
1
2
3
4
5
6
*select-expresion 和when-expresion进行比较如果成功,执行其后语句并直接跳到select结构末尾。如果没有一次比较成功,执行otherwise后的语句,otherwise后的语句也可以为空。when语句可以包含多个比较值,例如“when(3,5) limit=130;”表示agegroup是3或5,则limit等于130.
*select后还可以是空语句,此时,每一条when都将通过比较决定与否

data conditional;
length gender$1 quiz$2;
input age gender midterm quiz finalexam;
select;
when (missing(age)) agegroup=.";
when (age lt 20) agegroup=1;
when (age lt 40) agegroup=2;
when (age lt 60)agrgroup=3:
when (age ge 60)agegroup=4;
otherwise;
end;
datalines;

1
2
3
4
5
6
7
8
9
10
11
12
13
1.10 ODS输出系统
ODS能让用户选择以各种美观的格式报告和显示分析结果,使用DOCUMENT过程,可以生成多个ODS输出控制文档内容的去留及显示格式而不必反复运行过程和查询。
主要支持格式:
RTF 多文本文件格式
OUTPUT SAS数据集格式
LISTING
HTML
PRINTET
ODS输出RTF文档格式:

ODS LISTING CLOSE; /用户不创建列表输出/
ODS RTF FILE=“文件名.RTF”
…;
ODS RTF CLOSE;
ODS CLOSE;
1
2
3
4
5
SAS实例

ODS listing close; /关闭SAS列表输出/
ODS rtf file=’ E:\proc\chap2\example2_5.rtf’; /定义输出文档名为example2_5以及存储路径/
proc print data=chap2.example2_4;
run;
ODS rtf close; /结束将SAS运算结果以文本文档形式输出的过程/
ODS listing; /打开SAS列表输出/
1
2
3
4
5
6
ODS输出RTF文档格式,将rtf改为pdf;ods输出csv格式文档,将rtf改为csv

1.11export输出
Proc EXPORT
Data=数据集
OUTFILR=为导出的数据命名
DBMS=数据类型标识符
;
Run;

proc export data=sashelp.prdsale
outfile=‘C:\Users\SJ\Desktop\prdsale.csv’
dbms=csv replace;
delimiter=’,’; #指定分隔符
putnames=no; #是否将SAS变量名作为列名写入文件的第一行,默认为Yes
run;

作者:xjh163
来源:CSDN
原文:https://blog.csdn.net/xjh163/article/details/79391961
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sas9311-8i操作手册是一本关于SAS(Serial Attached SCSI)控制器的用户指南。SAS9311-8i是一款高性能的PCIe(Peripheral Component Interconnect Express)接口卡,用于连接和管理SAS和SATA(Serial ATA)硬盘驱动器。 该操作手册提供了详细的操作指南和技术信息,帮助用户了解如何正确安装、配置和使用SAS9311-8i控制器。手册包括以下主要内容: 1. 产品概述:介绍SAS9311-8i控制器的主要特性、技术规格和硬件组成,帮助用户了解产品的基本功能和性能。 2. 硬件安装:详细介绍如何将SAS9311-8i控制器安装到计算机的PCIe插槽中,并正确连接SAS和SATA硬盘驱动器。手册提供了清晰的插槽安装图和连接线路示意图,帮助用户进行正确的硬件安装。 3. 配置指南:介绍如何通过BIOS(Basic Input/Output System)或UEFI(Unified Extensible Firmware Interface)设置界面来配置SAS9311-8i控制器。手册提供了详细的设置步骤和说明,帮助用户根据自己的需求进行灵活的配置。 4. 系统管理:介绍如何通过操作系统或管理软件来监控和管理SAS9311-8i控制器和连接的硬盘驱动器。手册提供了常见的系统管理任务示例,如创建阵列、扩展容量、数据迁移等。 5. 故障排除:提供了常见问题和解决方案的详细列表,帮助用户在遇到问题时快速找到解决方法。 总的来说,SAS9311-8i操作手册是一本全面而详细的用户指南,可以帮助用户正确使用和管理SAS9311-8i控制器,从而提高计算机系统的存储性能和可靠性。如果有进一步的问题,用户可以随时参考该操作手册以获得帮助。 ### 回答2: SAS9311-8i操作手册是一本专门介绍SAS9311-8i RAID卡的使用方法和配置信息的手册。SAS9311-8i是一种用于服务器的RAID卡,它支持SAS和SATA硬盘,并提供高性能和高可靠性的数据存储解决方案。 在SAS9311-8i操作手册中,首先会介绍该RAID卡的硬件规格和连接方式。用户需要了解如何正确插拔硬盘,并将其连接到正确的接口上。此外,还会介绍如何正确安装和配置SAS9311-8i RAID卡,以及如何连接外部设备如硬盘阵列等。 接下来,操作手册会介绍如何使用管理工具来配置和管理SAS9311-8i RAID卡。用户可以通过这些工具来创建RAID阵列,设置RAID级别(如RAID 0、RAID 1等),并对阵列进行监控和管理。还会介绍如何进行磁盘的热插拔和替换,以及如何配置全局热Spare磁盘。 此外,操作手册还会介绍如何进行固件升级和驱动程序安装,以确保SAS9311-8i RAID卡的正常运行和稳定性。用户需要了解如何下载和安装最新的固件和驱动程序,并如何进行升级过程。 最后,操作手册还可能包含一些故障排除的内容,用户可以参考这些内容来解决一些常见的问题。例如,磁盘无法被识别、RAID阵列无法正常工作等问题。 综上所述,SAS9311-8i操作手册是一本全面介绍SAS9311-8i RAID卡的使用方法和配置信息的手册,用户通过阅读操作手册可以学习到如何正确安装、配置和管理SAS9311-8i RAID卡,以及解决常见问题的方法。 ### 回答3: sas9311-8i是一款广泛使用的SAS(串行附属存储器)控制器卡。它能够提供高性能和可靠性,适用于各种存储系统。下面是sas9311-8i操作手册的简要介绍。 sas9311-8i操作手册包含了关于这款控制器卡的全部信息,包括安装、配置和维护指南。操作手册首先介绍了硬件的安装步骤,包括如何将控制器卡插入计算机主板的插槽中,并连接必要的电源和数据线。 接着,手册介绍了如何通过BIOS进行基本的设置和配置。用户可以在BIOS设置界面中调整各种参数,如RAID级别、阵列容量等,以满足存储需求。此外,手册还提供了详细说明如何在操作系统中安装和配置驱动程序,以确保控制器卡能够正常工作。 操作手册中还包含了各种高级功能的使用指南。用户可以了解如何利用sas9311-8i的RAID功能来创建和管理多个磁盘阵列,以提供更好的数据保护和容错能力。手册还介绍了如何进行硬件故障排除和维护,以及如何监控和管理存储系统的性能。 总之,sas9311-8i操作手册是一份非常重要的参考资料,对于用户正确理解和使用这款控制器卡至关重要。无论是初次接触还是有一定经验的用户,都可以从操作手册中获得详细的指导,以最大程度地发挥sas9311-8i的功能特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值