SAS学习笔记3: proc format & format

目录

proc format

value

pricture

format与dataset之间的相互转换

dataset转换为format

 format格式转为dataset

format



  • proc format

proc format 常用于自定义格式。常见以下三种使用方式:

  1. value
  2. picture
  3. format和dataset之间转换

value

语法:

proc format;

        value

                'origin-value'='new-value'

                 ;

quit;

示例如下:

proc format library=work;
	value $sex
		'F'='女'
		'M'='男'
	;
quit;

data test1;
	set sashelp.class;
	format sex_new $sex.;
	sex_new=sex;
run;
	

SAS学习笔记3: proc format & format_第1张图片

 调用后生成的sex_new列并未改变原始值F/M,仅在展示时,显示为女/男。如下:

data test1;
	set sashelp.class;
	format sex_new $sex.;
	sex_new=sex;
	sex_new_=sex_new;
run;

 SAS学习笔记3: proc format & format_第2张图片

 Tips: 使用value定义格式时常用规则:

  1. 字符型:需要使用单引号''。(不可使用双引号"")。
  2. low:对于数值型变量,使用low来代指变量最小值。
  3. high: 对于数值型变量,使用high来代指变量最大值。
  4. low-high:指变量全部取值范围。
  5. other:代指所列取值以外的范围。

pricture

语法:

proc format:

        pricture

                'origin-value'='new-value'

        ;

quit;

示例如下:

data format_A;
	input id;
	datalines;
	12345678910
	24681024754
	25474983754
	;
run;

/*将转为000-0000-000电话号码格式*/
proc format;
	picture phone_number
	low-high='000-0000-0000'
	;
run;
/*将$00,000,000,000计数格式,并且显示乘以2*/
proc format;
	picture symbol
	low-high='00,000,000,000'(prefix='$' mult=2)
	;
run;

data test;
	set format_A;
	format id_1 phone_number. id_2 symbol15. ;
	id_1=id;
	id_2=id;
run;

SAS学习笔记3: proc format & format_第3张图片

 与value相同,上述format均不改变原始数据id值,id_1=id,id_2=id。

  • format与dataset之间的相互转换

dataset转换为format

data format;
    input id $5. group $8.;
    datalines;
1     group1
2     group2
3     group3
4     group4
other       
;
run;

data fmt(keep=fmtname start label);
    set format;
    retain fmtname '$group'; /*group前标注$,表明为字符型*/
    rename id=start group=label;
run;

proc format cntlin=fmt;
quit;

cntlin选项用法可见:proc format cntlin=XXX - 简书

 format格式转为dataset

proc format;
	value $id
	'1'='group1'
	'2'='group2'
	'3'='group3'
	'4'='group4'
	other=''
;
quit;

proc format 
	library=work 
	cntlout=id_output(where=(fmtname='ID'));
quit;
/*'ID'必须为大写,字符型前无需添加$*/
  • format

    在SAS DATA步添加一个新变量时,该变量长度会在第一次赋值时定义,后续变量赋值长度超过首次赋值长度时,会自动截断,导致结果显示不全。如下:

data test;
	set sashelp.class;
	if index(name,'A')>0 then comments='A';
	else comments='名字中不含字母A';
run;

上述comments变量首次赋值时,长度为1。else语句中变量赋值长度超过1,导致截断,结果显示为空。

SAS学习笔记3: proc format & format_第4张图片

SAS学习笔记3: proc format & format_第5张图片

 使用length语句,或format语句可避免上述问题。

data test;
	set sashelp.class;
	format comments $50.;
	if index(name,'A')>0 then comments='A';
	else comments='名字中不含字母A';
run;

 SAS学习笔记3: proc format & format_第6张图片

 SAS学习笔记3: proc format & format_第7张图片

你可能感兴趣的:(SAS学习,学习,sas)