1

我正在构建宏 whitch 通过我自己的结构从其他表生成空表。如何更改变量类型?

我的代码中的示例:

`%let vname = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varName))));
%let vtype = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varType))));
%let vformat = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varFormat))));

%if &vtype = C %then %do;
    &vname=putc(&vname,&vformat);
%end;`

它不工作......任何其他想法如何改变 var 类型?

4

1 回答 1

1

您应该清楚您是否只需要具有更改数据类型(定义)的某些列的空表,或者您还想实际转换数据内容/值。第一种情况应该容易得多。因为目前在

&vname=putc(&vname,&vformat);

您正在尝试转换数据值,而不是定义。变量的定义没有改变,在数据步骤中实际上是不能改变的。当您的数据步骤中仍然存在具有相同名称的原始变量时,您无法创建“新”变量。

在数据步骤中,您需要在数据步骤中定义具有不同名称的新变量,并在输出数据集上使用 RENAME(原始名称的新名称)和 DROP(原始名称)选项以在输出数据集中使用相同的名称(我可以如果需要,请澄清)。

对于仅定义空表,PROC SQL 可能更容易,您需要创建如下代码:

proc sql;
create table lib.table (
orig_var1 type format informat label
, orig_var2 NEWTYPE format informat label
, ...
);
quit;

可以从dictionary.columns 构建。这也更容易保持变量的原始顺序(在数据步骤中并不那么容易)。如果您想将数字变量的格式化值存储在新的字符变量中,您只需要注意根据所使用格式的长度为字符变量定义适当的长度。

于 2012-10-10T11:35:10.107 回答