我有一个数据步骤,其中有几列需要与另一列绑定。
我尝试使用多个“ from”语句和“ to”语句以及其他几个排列,但似乎没有办法解决问题。代码看起来像这样:
data analyze;
set css_email_analysis;
from = bill_account_number;
to = customer_number;
output;
from = bill_account_number;
to = email_addr;
output;
from = bill_account_number;
to = e_customer_nm;
output;
run;
我想在“从”列中看到两列显示帐单帐户,在“到”中显示其他值,但是我却得到一个帐单帐户及其客户编号,并带有一些“ ...” s代表其他值。
答案 0 :(得分:0)
这很可能是因为SAS有两种数据类型,并且第一次设置to
变量时,它的值为customer_number
。在第二个to
语句中,您尝试将to
的值设置为email_addr
。假设email_addr
是一个字符变量,那么这里可能发生两件事:
to
已设置为数字,因此SAS无法强制to
成为字符,可能会出现如下错误:注意:第15行第8列中的无效数字数据'me@mywebsite.com'to =。 错误 = 1 N = 1
to
设置为字符,但未明确定义其长度,如果它的长度小于email_addr
的值,则电子邮件地址将被截断。如果发生这种情况,SAS将不会显示错误:代码:
data _NULL_;
to = 'hiya';
to = 'me@mydomain.com';
put to=;
run;
short=me@m
to
的长度设置为4,SAS不会对其进行扩展以适应新数据。
这里要记住的是SAS在后台如何工作。
data
语句设置输出位置set
语句将第一次观察到的数据集指定的数据集添加到内存中称为PDV的空间中,从而继承了长度和数据类型。PDV:
bill_account_number|customer_number|email_addr|e_customer_nm
===================================================================
010101 | 758|me@my.com |John Smith
to
语句添加了另一个变量,继承了customer_number
的特征PDV:
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |758
({to
是字符长度3或数字)
to
语句将不会更改变量的特征,并且SAS将继续处理PDV(如果customer_number是character = TRUNCATION):
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |me@
PDV(如果customer_number是数字=数据错误,to
设置为丢失):
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |.
要解决此问题,最简单的方法是在第一个to
语句之前设置to
的长度和类型:
data analyze;
set css_email_analysis;
from = bill_account_number;
length to $200;
to = customer_number;
output;
...
您可能会收到这样的消息,其中SAS代表您转换了数据:
注意:数字值已转换为字符 在以下位置给定的值:(Line):( Column)。 27:8
不必显式定义from
的长度和类型,因为据我所知,您只能从源数据集中的一个变量获取此变量的值。如果不需要保留bill_account_number
变量,也可以使用重命名来实现:
rename bill_account_number = from;