如何使用串联更新字符变量的值?

时间:2018-04-05 14:23:36

标签: sas concatenation

我正在使用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。但是,它没有相同的数字问题,你可以看到它可以在循环的每个循环更新。所以,任何人都可以告诉我为什么它会发生在字符变量上以及如何解决它。

2 个答案:

答案 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;

<强>修正:

  1. 使用create table WORK.TMP2( bufsize=4096 ) ( z char(8), s char(1), t char(3) ); 语句指定长度
  2. 使用LengthCats()进行连接而不是||;这将删除前导和尾随空格
  3. <强>代码:

    Catx()

答案 1 :(得分:1)

在SAS中初始化字符变量时,会为其分配一个长度。在您的示例中,分配给变量s的长度的长度为1,因为初始化时,您为其分配了长度为1的字符串。

解决方案是使用length语句声明您希望字符串预先存在多长时间:

length s $2;