code: def set(self, name, value, index=-1):
          
  
          # just copy the first element of the ElementProxy (e.g. message.pid = message2.pid)
          if isinstance(value, ElementProxy):
              value = value[0].to_er7()
  
          name = name.upper()
          reference = None if name is None else self.element.find_child_reference(name)
          child_ref, child_name = (None, None) if reference is None else (reference['ref'], reference['name'])
  
          if isinstance(value, basestring):  # if the value is a basestring, parse it
              child = self.element.parse_child(value, child_name=child_name, reference=child_ref)
          elif isinstance(value, Element):  # it is already an instance of Element
              child = value
          elif isinstance(value, BaseDataType):
              child = self.create_element(name, False, reference)
              child.value = value
          else:
              raise ChildNotValid(value, child_name)
  
          if child.name != child_name:  # e.g. message.pid = Segment('SPM') is forbidden
              raise ChildNotValid(value, child_name)
  
          child_to_remove = self.child_at_index(child_name, index)
  
          if child_to_remove is None:
              self.append(child)
          else:
              self.replace_child(child_to_remove, child)
  
          # a set has been called, change the temporary parent to be the actual one
          self.element.set_parent_to_traversal()
docs: Assign the ``value`` to the child having the given ``name`` at the ``index`` position
  
          :type name: ``str``
          :param name: the child name (e.g. PID)
  
          :type value: an instance of :class:`Element <hl7apy.core.Element>`, a `str` or an instance of
              :class:`ElementProxy <hl7apy.core.ElementProxy>`
          :param value: the child value
  
          :type index: ``int``
          :param index: the child position (e.g. 1)