Eine Kombination aus dieser und der Frage
http://texwelt.de/wissen/fragen/1587/wie-kann-ich-ein-makro-redefinieren-falls-existent-sonst-definieren
»[Wie kann ich ein Makro redefinieren, falls existent, sonst definieren?](http://texwelt.de/wissen/fragen/1587/wie-kann-ich-ein-makro-redefinieren-falls-existent-sonst-definieren)« und der Antwort [Antwort von esdd esdd](http://texwelt.de/wissen/fragen/1584/wie-kann-ich-ein-makro-samt-namen-parametrisiert-definieren/1585) ergibt die Möglichkeit, zwei Fliegen mit einer Klappe zu schlagen. (Noch ganz frisch und kaum getestet)
schlagen:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{longtable}
\newcommand{\ram}[2]{\expandafter\newcommand\expandafter{\csname
ram#1\endcsname}{#2}}
\newcommand{\rom}[2]{\expandafter\newcommand\expandafter{\csname
rom#1\endcsname}{#2}}
\begin{document}
\ram{firstname}{Fritz}
\ram{lastname}{Becker}
\ram{date}{12.09.72}
\ram{dog}{Fluffy}
\ram{table}{\begin{longtable}{p{2cm}p{2cm}p{2cm}p{2cm}}\ramfirstname&\ramlastname&\ramdate&\ramdog \\\end{longtable}}
\rom{firstname}{Franz}
\rom{lastname}{Schaefer}
\rom{date}{13.05.75}
\rom{dog}{Rascal}
\ramfirstname \\
\ramlastname \\
\ramdate \\
\ramdog \\
\ramtable
\romfirstname \\
\romlastname \\
\romdate \\
\romdog \\
\rom{table}{\begin{longtable}{p{2cm}p{2cm}p{2cm}p{2cm}}\romfirstname&\romlastname&\romdate&\romdog
\\\end{longtable}}
\romtable
\end{document}