我正在构建宏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类型?
答案 0 :(得分: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构建。这也更容易保持变量的原始顺序(在数据步骤中不那么容易)。 如果您想将数值变量的格式化值存储在新的字符变量中,您只需要根据所使用格式的长度为字符变量定义合适的长度。