美好的一天,
我有不同格式的旧数据,并用新的更新。想法是变量------------------TestDirective.js---------------------------
define(['app'],function(app){
app.directive('testDirective',function(){
return{
restrict: 'E',
templateUrl: 'js/TestDirective.html',
link: function(scope){
scope.innerVariable = "Inner variable";
scope.ourterVariable = scope.testMessage;
scope.testFun = function(){
///To access ParentCtrl variable use scope
var pv = scope.parentVariable;
}
}
}
});
});
是用下划线WantedName
编写的,而新数据是没有这个。不过我没什么大不了的。
编辑:Wanted_Name
和WantedName
是SAS日期。
原始数据:
Wanted_Name
从2015年开始:
year Wanted_Name
2013 1234
2013 4321
2013 3241
我尝试了逻辑:
year WantedName
2015 5678
2015 8765
....
不。不工作。出于某种原因,它取了%macro macro_env;
data _null_;
call symput ("curr_year", year(date()) );
run;
data long_data;
set
%do year=2013 %to &curr_year.;
data.history&year.
%end;
;
WantedName=COALESCE(WantedName, Wanted_Name);
run;
%mend macro_env;
的第一个值并粘贴在整个数据范围内,除了新数据:
Wanted_Name
现在我设法通过删除year Wanted_Name WantedName
2013 1234 1234
2013 4321 1234
2013 3241 1234
....
2015 . 5678
2015 . 8765
函数并添加其他数据语句来修复此问题:
coalesce
问题:发生了什么或为什么原始的macro_env不起作用?
我认为data long_data;
set
%do year=2013 %to &curr_year.;
data.history&year.
%end;
;
run;
data long_data;
set long_data;
WantedName=COALESCE(WantedName, Wanted_Name);
run;
中的数据集首先被加载然后应用了函数。 (哪个在后面的数据声明中工作。显然不是......也许?
答案 0 :(得分:4)
作为答案形式,@ Allan Bowe解释了问题是源自数据集的变量会自动保留。所以你可以添加代码来清除它们。
data long_data;
set data.history20: ;
WantedName=COALESCE(WantedName, Wanted_Name);
output;
call missing(wantedname,wanted_name);
run;
或制作一个新变量。
data long_data;
set data.history20: ;
new_WantedName=COALESCE(WantedName, Wanted_Name);
format new_WantedName date9. ;
drop WantedName Wanted_Name ;
rename new_WantedName = WantedName ;
run;
答案 1 :(得分:2)
原因是pdv隐式保留已经“设置”的变量,并且在加载早期数据集(2015年之前)时,wantedName
没有从pdv中刷新。
编译器为它创建了一个空间(通过读取set语句中的所有数据集),但set命令没有(最初)替换wantedName
的值。
所以 - 当第一个观察结果被阅读时,wantedname
缺失,wanted_name
的第一个值被应用。
WantedName=COALESCE(., 1234); /* obs 1 */
在第二次迭代中,wantedname
的值已被保留,因此用于每次后续迭代,直到读取包含wantedname
的数据集。
WantedName=COALESCE(1234, 4321); /* obs 2 */
第二个示例使用从头开始的具有wantedname
变量的数据集。
很棒的问题!
答案 2 :(得分:2)
我认为更好的方法是在set语句中使用rename
来处理它。
data long_data;
set
%do year=2013 %to &curr_year.;
data.history&year.
%if &year lt 2015 %then %do;
(rename=wanted_name=wantedname)
%end;
%end;
;
run;
更便宜(重命名比coalesce
功能便宜)并且更简单。