我希望在两种情况下除法运算都会失败,因为操作不在数值之间。第一个案例有效。第二种情况无法按预期执行。有人可以解释一下这个区别吗?我使用的是SAS 9.04。
案例1(工作):
data work.products;
Product_Number = 11;
Item = '12';
Item_Reference = Item/Product_Number;
run;
案例2(不工作):
data work.products;
Product_Number = 11;
Item = '12';
Item_Reference = Product_Number/Item;
run;
答案 0 :(得分:3)
如果案例1可行,但案例2没有,则必须是涉及SAS 9.0的某种错误。如果检测到字符串是数字,SAS应自动将字符值转换为数字。您的代码在SAS 9.4中没有问题。由于自动类型转换不适合您,您可以使用input
函数或将值乘以1轻松解决问题。
data work.products;
Product_Number = 11;
Item = '12';
Item2 = input(Item, 8.);
Item_Reference = Product_Number/Item2;
run;
data work.products;
Product_Number = 11;
Item = '12';
Item2 = Item*1
Item_Reference = Product_Number/Item2;
run;
答案 1 :(得分:1)
您的两个代码都在运行
案例1以及案例2正在运作。
您正在使用字符变量作为基本上是字符串的项目。字符串包含字符和数字。在这种情况下,您的项目仅包含数字,SAS会在执行数值运算时将值视为数字,例如
data work.products;
Product_Number = 11;
Item = '12a';
Item_Reference = Product_Number/Item;
run;
此程序将给出错误并将缺少的值放在item_reference中。日志文件将声明以下内容: -
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
59:33
NOTE: Invalid numeric data, Item='12a' , at line 59 column 33.
Product_Number=11 Item=12a Item_Reference=. _ERROR_=1 _N_=1
NOTE: Missing values were generated as a result of performing an operation on missing values.
Each place is given by: (Number of times) at (Line):(Column).
1 at 59:32
NOTE: The data set WORK.PRODUCTS has 1 observations and 3 variables.
NOTE: DATA statement used (Total process time):
real time 0.02 seconds
cpu time 0.03 seconds
因此,当您执行数值运算时,SAS会尝试将字符值转换为数字格式。
答案 2 :(得分:0)
他们两个都应该执行得很好。在计算过程中,字符值将转换为数字,您将在日志中收到此消息:
注意:字符值已在以下位置转换为数值:(行):(列)。