当前位置: 首页>大数据>正文

《The Little SAS Book》学习笔记---Chapter2(4)指针和冒号修饰符

行指针

如果一个观测分布在了数据的多行,这个时候在读取数据时,可能就需要行指针发挥作用了。

斜线(/)和井号(#n)

斜线(/)井号(#n)是常用的两种行指针

如果要为一个观测读取位于多行中的数据,在input语句中插入一个斜线指示跳到下一个原始数据行。

#n执行跳转到特定的行,n指定行号。例如,#2指定跳转到原始数据行的第2行

用书中的一个例子进行说明:

data temp;
    input city $ state $ 
          / normalhigh normallow
          #3 recordhigh recordlow;
cards;
Nome AK
55 44
88 29
Miami FL
90 75
97 65
Raleigh Nc
88 68
105 50
;
run;

proc print data = temp ;
    title "High and Low Temperatures";
run;

列指针

@符号

SASdata步中,@符号在不同的位置发挥不同的作用。

@n

@在变量名前面,后面紧跟数字,表明将指针移动到特定的位置进行数据的读取

例如@40,表示指针移动到列40进行读取数据

@'character'列指针

如果不知道所要读取的变量开始的位置,但是知道它总是在一个特定的字符或者单词后面出现,就可以使用@'character'指针

如书中的例子,要读取一个狗品种相关的数据,但是原始数据并不整齐,但是已经知道狗的品种信息总是出现在breed之后,那么可以在input语句中使用下列方式读取:

input @'Breed:' Dogbreed $;

冒号修饰符

上面的语句没有指定字符串长度,默认是8,因此,当狗的品种字符超过8了,在读取时便可能出现问题。

但是如果指定一个过长的长度值,也可能读入后面的无用或者多余信息。

这个时候,在变量名之后使用冒号修饰符是不错的选择,它告诉SAS,读到指定的长度,或者首次遇到空格

来看书中的一个例子,对于原始数据:

My dog Sam Breed: Rottweiler Vet Bills: 8

使用不同input语句进行读取:

  • 使用@'character'列指针但未指定字符长度
data temp1;
    input @'Breed:' DogBreed $;
cards;
My dog Sam Breed: Rottweiler Vet Bills: 8
;
run;
proc print data = temp1; title "Temp1"; run;
  • 使用@'character'列指针,指定字符长度
data temp2;
    input @'Breed:' DogBreed .;
cards;
My dog Sam Breed: Rottweiler Vet Bills: 8
;
run;
proc print data = temp2; title "Temp2"; run;
  • 使用@'character'列指针和冒号,指定字符长度
data Temp3;
    input @'Breed:' DogBreed :.;
cards;
My dog Sam Breed: Rottweiler Vet Bills: 8
;
run;
proc print data = Temp3; title "Temp3"; run;

例子虽然简单,但是也比较好的体现出了@和冒号修饰符的用法。


https://www.xamrdz.com/bigdata/7ca1993909.html

相关文章: