我正在使用SAS EG,在下面的MWE中,我试图通过连接一些新字符来更新现有的字符变量。
data tmp;
input z $;
cards;
a
a
a
;
run;
data tmp2;
set tmp;
s ='x';
t = s || 'y';
s = s || 'y';
run;
data tmp3;
set tmp2;
a = 0;
do i=1 to 4;
a = a+i;
s = s || 'y';
end;
run;
因此,此代码将连接t中的两个字符串,但它不会更新s。但是,它没有相同的数字问题,你可以看到它可以在循环的每个循环更新。所以,任何人都可以告诉我为什么它会发生在字符变量上以及如何解决它。
答案 0 :(得分:2)
这是因为sas数字(numeric)的默认长度为8,大约是15位浮点数,但是func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage{
preview.contentMode = .scaleAspectFit
preview.image = pickedImage
}
dismiss(animated: true, completion: nil)
}
是char,长度为1。
您可以通过运行s
并检查日志来确认:
<强>调试:强>
Proc SQL Describe Table
<强>日志:强>
Proc sql; describe table tmp2; quit;
<强>修正:强>
create table WORK.TMP2( bufsize=4096 )
(
z char(8),
s char(1),
t char(3)
);
语句指定长度Length
或Cats()
进行连接而不是||;这将删除前导和尾随空格<强>代码:强>
Catx()
答案 1 :(得分:1)
在SAS中初始化字符变量时,会为其分配一个长度。在您的示例中,分配给变量s
的长度的长度为1,因为初始化时,您为其分配了长度为1的字符串。
解决方案是使用length
语句声明您希望字符串预先存在多长时间:
length s $2;