设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1485|回复: 0

SAS中数据步常用知识

[复制链接]

3

主题

29

金钱

50

积分

新手用户

发表于 2019-9-27 14:44:51 | 显示全部楼层 |阅读模式

1.一个完整的数据步与过程步
data mydb.student;
input id name $ sex $ score;
cards;
101 张三 男 98
102 李四 男 87
103 兰兰 女 95
;
run;
proc print data=mydb.student (keep=id name score);
run;

data sfz;
length id $18.;
input id sex $;
cards;
370825186532435432 M
010356789235875763 F
234567890098765988 M
345432680102300670 F
;
run;
proc print;
run;

2.Date、time、datetime类型
date riq;
cdate="3mar2010"d;
ctime='7:30't;
cdatetime='6jan2010:8:18:30pm'dt;
run;
proc print;
format cdate yymmdd10. ctime time10. cdatetime datetime22.;
run;

3.外部文件导入数据到SAS
libname temp 'c:\temp';
%let f1='c:\temp\abc.txt';
filename fil "(&f1)";
data temp.hw;
infile fil;
input h w;
run;
proc print data=temp.hw;
run;

4.SAS导出数据到外部文件
data _null_;
set mydb.student;
file 'c:\temp\stu1.txt';
put id name $ sex $ score;
run;

5.列指针控制读取
%let f2='c:\temp\abc1.txt';
filename fin "(&f2)";
data test;
infile fin;
input
@1 x1 $3.
@4 x2 6.
@10 x3 $4.
;
run;
proc print;
run;

6.列控制符号
%let f2='c:\temp\abc1.txt';
filename fin "(&f2)";
data test;
infile fin;
input
x1 $1-3
x2 4-9
x3 $10-13
;
run;
proc print;
run;

7.分隔符
%let f2='c:\temp\abc2.txt';
filename fin1 "(&f3)";
data test;
infile fin1 dlm=',';
input x1 $ x2 x3 $;
run;
proc print;
run;

8.data: 当前数据集
proc print;                    /*默认输出当前数据集*/
proc print data=xxx;     /*输出指定数据集*/
run;

9.指针控制=>绝对指针控制=>数值型
三种形式: @数字、@指针变量、@表达式
input @15 sales 5.;               /*形式1: @数字*/
A=25; input num 1-6 @A num $ 10.; /*形式2: @指针变量*/               
data one;
b=2;
input @(b*3) grade @1 a 3.;       /*形式3: @表达式*/
datalines;
1234567 343454
;
proc print;
run;

输出结果:
Obs b grade a
1   2 67   123

10.列指针控制=>绝对指针控制=>字符型
三种形式:@’字符串’,@字符变量,@字符表达式
data one;
input @'size=' a 3.;
datalines;
li li f19size=343454
wang da zhi m 20size=123456
proc print;
run;

输出结果:
Obs a
1 343
2 123

11.列指针控制=>相对指针控制  只有数字型
三种形式:+n,+指针变量,+表达式,意指把指针从当前位置移过指定的位数
负数表示指针往左移动
例子
input @23 length 4. +5 width;
m=-1; input x 1-10 +m y 2.;
input x 1-10 +(-1) y 2.;

12.行指针控制: 适用于一个观测值占有多个输入行的情况
4种形式:#n,#指针变量,#表达式,/
input语句中,#号后最大的数字决定每个观测占有多少行
/表示把指针移动到下一输入行的第一列
当每个观测有多个输入行,但不从最后一行读取数据的时候,在input语句末尾必须使用#将指针移到最后一行。
e.g:
input @31 age 3. #3 id 3-4 #2 @6 name $ 20.;
input name $ 1-10 #2 age 13-14 #4;
input age grade/score1-score5;
input a / b #1 @52 c #2;

13.label语句: 给变量别名
data d;
input name $12. sex $ h w;
label h='身高' w='体重';
datalines;
zhangzhihui f 1.71 49
zhaochangtai m 1.73 55
;
proc print label;  /*label 表示输出变量别名*/
run;

14.lostcard语句
当一个观测值占有多个输入行时,该语句用于防止丢失输入行后引发的定位错误
通常和if … then … 语句一起使用,if语句用于指出判定数据行丢失的条件
e.g:
data test;
input id test1 #2 idcheck test2 test3;
if id ne idcheck then lostcard;
datalines;
301 92
301 61 73
302 83
302 88 99
303 92 78  
304 85
304 90 94
;
proc print;
run;

输出结果: 丢失数据303 92 78
Obs id test1 idcheck test2 test3
1 301 92 301 61 73
2 302 83 302 88 99
3 304 85 304 90 94

15.missing语句
用于指出某些数据缺失的原因
使用一个字母进行missing登记,系统遇到missing值后,不会按无效数据处理,而是登记到数据集中
data surv;
missing N R;
input num answer @@;
datalines;
1001 2 1002 r 1003 1
1004 n 1005 2
proc print;
run;

输出结果: 缺失数据已N R替换
Obs num answer
1 1001 2
2 1002 R
3 1003 1
4 1004 N
5 1005 2

16.从excel表单中读入数据
(1)程序实现
LIBNAME ep 'e:\saslx';
PROC IMPORT OUT= EP.score /*为建永久数据集另加的语句 */
DATAFILE= "E:\SASEX\cjb.xls"
DBMS=EXCEL REPLACE;
SHEET="Sheet1$";
GETNAMES=YES;
options nodate;
proc print;
RUN;
(2)SAS菜单操作
文件>>导入数据>>Microsoft Excel Workbook(*.xls *.xlsb *xlsm *.xlsx),选择浏览excel文件,点击OK按钮。

file print:  输出到output窗口
file log:    输出到日志窗口
file 字符串: 输出到指定文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表