在SAS中使用压缩和输入功能
我这里有两个数据集:在SAS中使用压缩和输入功能,sas,Sas,我这里有两个数据集: data ONE; input ID LastName $ FirstInit $ 1.; datalines; 509182793 Smith C 319861601 Williams J 345121778 Connor F 480863211 King L
data ONE;
input ID LastName $ FirstInit $ 1.;
datalines;
509182793 Smith C
319861601 Williams J
345121778 Connor F
480863211 King L
907636280 Franklin D
729082859 Monroe T
835688938 Hall K
;
run;
data TWO;
input ID $ 11. State $ 2.;
datalines;
334-99-5246 TX
480-86-3211 MD
449-55-9407 VA
345-12-1778 GA
907-63-6280 NY
790-09-9813 WY
319-86-1601 FL
;
run;
我有两个问题:
1) 您将如何使用COMPRESS
创建新的字符变量“ncv”,并将ncv的值设置为字符变量ID的值,同时删除连字符?以下是我的尝试:
data TWO_NUMERIC;
set TWO;
ncv=COMPRESS(TWO, "+-", "d");
run;
2) 如何使用PUT/INPUT
将ncv转换为数值,以创建数值变量“newncv”
从这两个问题开始,我先从数据步骤和SET语句开始:
data TWO_NUMERIC;
set TWO;
run;
我查看了SAS 9.2的帮助页面,但在示例代码中使用这两条语句似乎让我感到困惑 好的,我本来想说RTM,但在这种情况下,它不清楚,至少在我看来不清楚 压缩的错误在于第一个参数应该是变量,在本例中是ID,而不是数据集2。此外,您只需要在列表中指定-而不是+,除非您认为变量中可能也有+。添加修饰符D,指定将数字添加到移除列表,这与您想要的相反 与PUT/INPUT的概念类似,引用变量并确保使用了正确的函数,在本例中,输入将其转换为数值
Data two_numeric;
set two;
ncv=COMPRESS(ID, "-");
ncv_num=input(ncv, 12.);
run;
压缩可以用多种方式,一种是上面@Reeza描述的,另一种是使用“k”修饰符,意思是“保持”,如下所示
data TWO_NUMERIC;
set TWO;
ncv_d=COMPRESS(ID," ", "kd"); * kd means keep-digits, your code had TWO which is a dataset name;
ncv_n=COMPRESS(ID," ", "kn"); * kd means keep-numbers;
/* Input Function is used to convert CHAR to NUM *
* the best. format applies the nearest matching format */
newncv=input(ncv_d,best.);
run;
我发现用于解释K修饰符的链接是您的data和set语句缺少分号,分号需要在数据输入步骤的单独一行中。您说它们让您感到困惑,你能发布你在这些函数上的实际尝试吗?我已经附上了我认为最好的。是一种格式。如果您需要通用信息,请使用
12.
或F12.
或COMMA12.
。@Tom-Best。通常会让SAS选择最佳的符号。我也同意使用12。或者F12。甚至是16强。最好的一面:)如果使用best.
作为格式,SAS将决定使用的最佳显示格式。但是,当你阅读数据时,这个决定是由生成你正在阅读的文本的人做出的。但是如果您在INFORMAT中指定BEST.
,那么SAS将切换到使用F.
格式。F.
格式知道如何读取带小数点和不带小数点的数据以及科学符号。如果输入数据可能包含逗号或美元符号,则应使用逗号。
INFORMAT。
data TWO_NUMERIC;
set TWO;
ncv_d=COMPRESS(ID," ", "kd"); * kd means keep-digits, your code had TWO which is a dataset name;
ncv_n=COMPRESS(ID," ", "kn"); * kd means keep-numbers;
/* Input Function is used to convert CHAR to NUM *
* the best. format applies the nearest matching format */
newncv=input(ncv_d,best.);
run;